Подтвердить что ты не робот

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");

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

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

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

4b9b3361

Ответ 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. Подробнее см. этот ответ.