【发布时间】:2011-07-15 18:14:20
【问题描述】:
我在使用简单的正则表达式匹配时遇到了很多问题。
我有这个带有重音字符的字符串(这只是一个例子)"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! " 的字符串(注意“Botó”之后的“n”)并运行相同的代码:
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”,它会按预期工作。 如果您尝试在中间匹配带有重音的单词,它会按预期工作。 但是,如果您尝试匹配末尾带有重音的单词,则会失败。
我做错了什么?这是预期的行为吗?
【问题讨论】:
标签: javascript regex match non-ascii-characters