Проблема с регулярным выражением Javascript с \ b и международными символами

У меня много проблем с простым сопоставлением регулярного выражения.

У меня есть строка с диакритическими знаками (это всего лишь пример) «Botó Entrepà Nadó Facebook!» , и я хочу сопоставить слова, используя слова из другого списка.

Это упрощенная версия моего кода. Например, для соответствия « Botó »

var matchExpr = new RegExp ('\\b' + 'Botó' + '\\b','i'); 
"Botó Entrepà Nadó Facebook! ".match(matchExpr);

Если я его запустил, он не соответствует ожидаемому « Botó » (Firefox, IE и Chrome).

Я подумал, что это ошибка с моей стороны. Но вот самое интересное ...

Если я изменю строку следующим образом «Botón Entrepà Nadó Facebook!» (обратите внимание на « n » после « Botó "), и я запускаю тот же код:

var matchExpr = new RegExp ('\\b' + 'Botó' + '\\b','i'); 
"Botón Entrepà Nadó Facebook! ".match(matchExpr);

Он соответствует" Botó "!!!! ????? (по крайней мере, в Firefox). Для меня это не имеет смысла, поскольку « n » НЕ является границей слова (которое соответствует \ b ).

Если вы попытаетесь сопоставить все слово:

var matchExpr = new RegExp ('\\b' + 'Botón' + '\\b','i'); 
"Botón Entrepà Nadó Facebook! ".match(matchExpr);

Это работает.

Чтобы сделать это немного более странным, мы добавляем еще одну букву с диакритическими знаками в конце.

var matchExpr = new RegExp ('\\b' + 'Botóñ' + '\\b','i'); 
"Botóñ Entrepà Nadó Facebook! ".match(matchExpr);

Если мы попытаемся сопоставить это, ничего не получится. НО, если мы попробуем этот

var matchExpr = new RegExp ('\\b' + 'Botóñ' + '\\b','i'); 
"Botóña Entrepà Nadó Facebook! ".match(matchExpr);

, он соответствует " Botóñ ". Что неверно.

Если мы попытаемся сопоставить «Facebook», он работает, как ожидалось. Если вы попытаетесь сопоставить слова с акцентами посередине, это сработает, как ожидалось. Но если вы попытаетесь сопоставить слова с ударением в конце, ничего не получится.

Что я делаю не так? Это ожидаемое поведение?

12
задан Gumbo 15 March 2011 в 12:23
поделиться