我在进行简单的正则表达式匹配时遇到了很多问题。
我有一个包含重音符号的字符串(这只是一个示例)
这是我的代码的简化版本。例如,要匹配"
我有一个包含重音符号的字符串(这只是一个示例)
"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",则正常工作。 如果你尝试匹配中间带有重音符号的单词,它也能正常工作。 但如果您尝试匹配以重音符号结尾的单词,则失败。
我做错了什么?这是预期的行为吗?
.toUpperCase()
和.toLowerCase()
似乎相当友好于Unicode,因此在理论上,c.toUpperCase()!= c || c.toLowerCase()!= c
应该为“带大小写字母的字母表”的成员字符测试为真(这仍然不包括所有“单词边界”)。是否有一些官方的主要列表或数据库可以确定哪些Unicode字形应被视为字母? - Lori