UTF-8 слово регулярное выражение в JavaScript - PullRequest
22 голосов
/ 21 мая 2010

В JavaScript:

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

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

"AB abc cab AB AB"

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

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

оператор границы слова не работает:

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

Есть ли решение для этого?

Ответы [ 5 ]

25 голосов
/ 21 мая 2010

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

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

"αβ αβγ γαβ αβ αβ".replace(/(^|\s)αβ(?=\s|$)/g, "$1AB")
2 голосов
/ 13 марта 2013

Мне нужно было что-то программируемое и обрабатывать знаки препинания, скобки и т. Д.

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, поэтому я нашел эту страницу и также ответил на нее из-за необходимости, так как не смог найти регулярное выражение с параметром границы слова, которое бы хорошо работало для Unicode.

2 голосов
/ 21 мая 2010

Не во всех реализациях регулярных выражений Javascript есть поддержка рекламы в Юникоде, поэтому вам нужно ее отключить

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

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

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

1 голос
/ 18 ноября 2010

Когда вы имеете дело с Unicode и словами естественного языка, вы, вероятно, хотите быть более осторожными с границами, чем просто использовать \b. См. этот ответ для деталей и указаний.

1 голос
/ 21 мая 2010

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

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

...