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