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