javascript中的utf-8字边界正则表达式

che*_*vim 22 javascript regex unicode utf-8 word-boundary

在JavaScript中:

"ab abc cab ab ab".replace(/\bab\b/g, "AB");
Run Code Online (Sandbox Code Playgroud)

正确地给了我:

"AB abc cab AB AB"
Run Code Online (Sandbox Code Playgroud)

当我使用utf-8字符时:

"?? ??? ??? ?? ??".replace(/\b??\b/g, "AB");
Run Code Online (Sandbox Code Playgroud)

字边界运营商似乎并没有工作:

"?? ??? ??? ?? ??"
Run Code Online (Sandbox Code Playgroud)

这个问题有方法解决吗?

Gum*_*mbo 25

如果单词字符不在另一个单词字符之前或后面,则单词边界断言仅匹配(因此.\b.等于\W\w\w\W).并\w定义为[A-Za-z0-9_].所以\w与希腊字符不匹配.因此你无法使用\b这种情况.

你可以做的是使用这个:

"?? ??? ??? ?? ??".replace(/(^|\s)??(?=\s|$)/g, "$1AB")
Run Code Online (Sandbox Code Playgroud)

  • @cherouvim:不,它会占用单词之后的空格,然后是下一次查找的开始.所以只看"αβαβ",第一次匹配会消耗""αβ|αβ"`(`|`表示内部指针),最后一部分不匹配,因为没有剩下的前导空格.但由于前瞻断言不消耗字符,因此第一次匹配后指针的位置将为"αβ|αβ",并且前导空间将保留用于下一次匹配. (3认同)