我在简单的正则表达式匹配方面遇到了很多问题。
我有这个带有重音字符的字符串(这只是一个例子)"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”,它会按预期工作。如果您尝试匹配带有中间重音的单词,它会按预期工作。但是,如果您尝试匹配末尾带有重音的单词,则会失败。
我究竟做错了什么?这是预期的行为吗?