UTF-8 слово границы регулярного выражения в JavaScript
-
04-10-2019 - |
Вопрос
В JavaScript:
"ab abc cab ab ab".replace(/\bab\b/g, "AB");
правильно дает мне:
"AB abc cab AB AB"
Когда я использую символы UTF-8, хотя:
"αβ αβγ γαβ αβ αβ".replace(/\bαβ\b/g, "AB");
то Оператор границы слова Похоже, не работает:
"αβ αβγ γαβ αβ αβ"
Есть ли этому решение?
Решение
Слово пограничное утверждение имеет значение только в том случае, если символ слова не предшествует или за ним следует другой символ слова (так .\b.
равно \W\w
а также \w\W
). А также \w
определяется как [A-Za-z0-9_]
. Отказ Так \w
не соответствует греческим персонажам. И, таким образом, вы не можете использовать \b
Для этого случая.
То, что вы могли сделать вместо этого, это использовать это:
"αβ αβγ γαβ αβ αβ".replace(/(^|\s)αβ(?=\s|$)/g, "$1AB")
Другие советы
Не все реализация Regexp javaScript имеет поддержку AD Unicode, поэтому вам нужно избежать его
"αβ αβγ γαβ αβ αβ".replace(/\u03b1\u03b2/g, "AB"); // "AB ABγ γAB AB AB"
Для отображения персонажей вы можете взглянуть на http://htmlhelp.com/reference/html40/ustietities/symbols.html.
Конечно, это не помогает со словом граничной проблемой (как объяснено в других ответах), но, по крайней мере, следует, по крайней мере, позволит вам правильно соответствовать символам
Мне нужно было что-то, чтобы быть программируемым и обрабатывать пунктуацию, скобки и т. Д.
var wordToReplace = '買い手',
replacementWord = '[[BUYER]]',
text = 'Mange 買い手 information. The selected Store and Classification will be the default on the สั่งซื้อ.'
function replaceWord(text, wordToReplace, replacementWord) {
var re = new RegExp('(^|\\s|\\(|\'|"|,|;)' + wordToReplace + '($|\\s|\\)|\\.|\'|"|!|,|;|\\?)', 'gi');
return text.replace(re, replacementWord);
}
Я написал редактор ресурсов JavaScript, поэтому именно поэтому я нашел эту страницу, а также ответил на него не по необходимости, поскольку я не смог найти слово параметра параметризованного Regexp, которое хорошо работало для Unicode.
Не все реализации Regex связаны с JavaScript MESSINGS, в курсе Unicode осознает.
Например, Microsofts JScript использует в IE, ограничен ANSI.
Когда вы имеете дело с Unicode и словами на натуральные слова, вы, вероятно, хотите быть более осторожными с границами, чем просто использовать \b
. Отказ Видеть Этот ответ для деталей и направлений.