用Javascript正则expression式匹配重音字符
这是我今天遇到的一个有趣的片段:
/\ba/.test("a") --> true /\bà/.test("à") --> false
然而,
/à/.test("à") --> true
首先, wtf?
其次,如果我想在一个单词的开头匹配一个重音字符,我该怎么做? (我真的很喜欢避免使用/(?:^|\s|'|\(\) ....
)之类的select器。
这对我工作:
/^[az\u00E0-\u00FC]+$/i
在这里的帮助
/\bà/.test("à")
不匹配的原因是因为”à“不是一个单词字符。 转义序列\b
仅在单词字符的边界和非单词字符之间匹配。 /\ba/.test("a")
匹配,因为”a“是一个单词字符。 因此,string(不是单词字符)的开头与单词字符“a”之间存在边界。
JavaScript正则expression式中的单词字符定义为[a-zA-Z0-9_]
。
要匹配string开始处的重音字符,只需在正则expression式开始处使用^
字符(例如/^à/
)即可。 该字符意味着string的开始(与在string内的任何字边界匹配的\b
不同)。 这是最基本的和标准的正则expression式,所以它绝对不是顶部。
堆栈溢出在正则expression式中也有一个非ASCII字符的问题,你可以在这里find它。 他们不处理单词边界,但也许会给你有用的提示。
还有另一个页面 ,但他想匹配string而不是单词。
我不知道,现在也没有find你的问题的主angular,但是当我看到我的第一个链接中使用了怪物正则expression式的时候,你想避免的这个群体并不是顶尖的,而且也是我的观点你的解决scheme