Рассмотрим следующее регулярное выражение Unicode-тяжелое (emoji, стоящий для символов, отличных от ASCII и вне BMP):
'🍤🍦🍋🍋🍦🍤'.match(/🍤|🍦|🍋/ug)
Firefox возвращает [ "🍤", "🍦", "🍋", "🍋", "🍦", "🍤" ]
🤗.
Chrome 52.0.2743.116 и Node 6.4.0 оба возвращают null
! Кажется, мне неинтересно, если я поместил строку в переменную и сделаю str.match(…)
, и если я создам объект RegExp через new RegExp('🍤|🍦|🍋', 'gu')
.
(Хром в порядке с просто ORing в двух последовательностях: '🍤🍦🍋🍋🍦🍤'.match(/🍤|🍦/ug)
в порядке. Также он работает с не-Unicode: 'aakkzzkkaa'.match(/aa|kk|zz/ug)
работает.)
Я что-то делаю неправильно? Это ошибка Chrome? Таблица совместимости ECMAScript говорит, что я должен быть в порядке с регулярными выражениями Unicode.
(PS: три emoji, используемые в этом примере, являются просто stand-ins. В моем приложении они являются произвольными, но разными строками. Но мне интересно, имеет ли значение тот факт, что '🍤🍦🍋🍋🍦🍤'.match(/[🍤🍦🍋]/ug)
работает в Chrome?)