граница слова utf-8 regex в JavaScript

В JavaScript:

"ab abc cab ab ab".replace(/\bab\b/g, "AB");

правильно дает мне:

"AB abc cab AB AB"

Когда я использую utf-8 символы хотя:

"αβ αβγ γαβ αβ αβ".replace(/\bαβ\b/g, "AB");

граничный оператор слова, кажется, не работает:

"αβ αβγ γαβ αβ αβ"

Существует ли решение этого?

22
задан tchrist 4 April 2015 в 18:49
поделиться

3 ответа

Утверждение границы слова соответствует только в том случае, если символу слова не предшествует или не следует другой символ слова (поэтому . \ B. равно ] \ W \ w и \ w \ W ). А \ w определяется как [A-Za-z0-9 _] . Итак, \ w не соответствует греческим символам. Таким образом, вы не можете использовать \ b в этом случае.

Вместо этого вы могли бы использовать следующее:

"αβ αβγ γαβ αβ αβ".replace(/(^|\s)αβ(?=\s|$)/g, "$1AB")
25
ответ дан 29 November 2019 в 05:16
поделиться

Не все реализации RegEx, связанные с механизмами Javascript, поддерживают Unicode.

Например, использование Microsoft JScript в IE ограничено ANSI.

1
ответ дан 29 November 2019 в 05:16
поделиться

Не все реализации Javascript regexp имеют поддержку объявления Unicode, поэтому вам нужно его экранировать

"αβ αβγ γαβ αβ αβ".replace(/\u03b1\u03b2/g, "AB"); // "AB ABγ γAB AB AB"

Для отображения символов вы можете взглянуть на http://htmlhelp.com/reference/html40/entities/symbols.html

Конечно, это не поможет с проблемой границ слов (как объясняется в других ответах), но по крайней мере позволит вам правильно сопоставить символы

2
ответ дан 29 November 2019 в 05:16
поделиться
Другие вопросы по тегам:

Похожие вопросы: