gpt4 book ai didi

\b 和国际字符的 Javascript 正则表达式问题

转载 作者:可可西里 更新时间:2023-11-01 02:09:03 25 4
gpt4 key购买 nike

我在使用简单的正则表达式匹配时遇到了很多问题。

我有这个带有重音字符的字符串(这只是一个示例)"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 中的速记字符类不支持 unicode(甚至高 ASCII)。

看看这个问题的答案:Javascript + Unicode .这篇文章,链接在那个问题上,JavaScript, Regex, and Unicode , 表示 \b 是由一个单词边界定义的,定义为:

→ Word character — The characters A-Z, a-z, 0-9, and _ only.
→ Word boundary — The position between a word character and non-word character.

因此它适用于结尾带有 A-Z、a-z、0-9 和 _ 的单词,但不适用于结尾带有重音字符的单词。

关于\b 和国际字符的 Javascript 正则表达式问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5311618/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com