Utf-8 регулярное выражение границы слова в javascript
В JavaScript:
"ab abc cab ab ab".replace(/\bab\b/g, "AB");
правильно дает мне:
"AB abc cab AB AB"
Когда я использую символы utf-8, хотя:
"αβ αβγ γαβ αβ αβ".replace(/\bαβ\b/g, "AB");
оператор текстовых границ не работает:
"αβ αβγ γαβ αβ αβ"
Есть ли решение для этого?
Ответы
Ответ 1
Утверждение о границе слова соответствует только если символ слова не предшествует или не сопровождается другим символом слова (поэтому .\b.
равно \W\w
и \W\w
). И \w
определяется как [A-Za-z0-9_]
. Таким образом, \w
не соответствует греческим символам. И поэтому вы не можете использовать \b
для этого случая.
Вместо этого вы можете использовать это:
"αβ αβγ γαβ αβ αβ".replace(/(^|\s)αβ(?=\s|$)/g, "$1AB")
Ответ 2
Не вся реализация Jexcript-regexp имеет поддержку для объявления Unicode, поэтому вам нужно избегать его
"αβ αβγ γαβ αβ αβ".replace(/\u03b1\u03b2/g, "AB"); // "AB ABγ γAB AB AB"
Для сопоставления символов вы можете взглянуть на http://htmlhelp.com/reference/html40/entities/symbols.html
Конечно, это не помогает в вопросе о проблеме с символами (как объясняется в других ответах), но должно по крайней мере позволить вам правильно соответствовать символам
Ответ 3
Мне нужно что-то программируемое и обрабатывать знаки препинания, скобки и т.д.
http://jsfiddle.net/AQvyd/
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, поэтому я нашел эту страницу и также ответил на нее по необходимости, так как я не смог найти переменную paramagarp с разделителями слов, которая хорошо работала для Unicode.
Ответ 4
Не все реализации RegEx, связанные с Javascript, поддерживают unicode.
Например, Microsoft JScript, использующийся в IE, ограничен ANSI.
Ответ 5
Когда вы работаете с Unicode и словами на естественном языке, вы, вероятно, захотите быть более осторожными с границами, чем просто использовать \b
. Подробнее см. этот ответ.