У меня много проблем с простым сопоставлением регулярного выражения.
У меня есть строка с диакритическими знаками (это всего лишь пример) «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», он работает, как ожидалось. Если вы попытаетесь сопоставить слова с акцентами посередине, это сработает, как ожидалось. Но если вы попытаетесь сопоставить слова с ударением в конце, ничего не получится.
Что я делаю не так? Это ожидаемое поведение?