utf-8字边界正则expression式在javascript中

在JavaScript中:

"ab abc cab ab ab".replace(/\bab\b/g, "AB"); 

正确给我:

 "AB abc cab AB AB" 

当我使用utf-8字符时:

 "αβ αβγ γαβ αβ αβ".replace(/\bαβ\b/g, "AB"); 

字边界算子似乎不工作:

 "αβ αβγ γαβ αβ αβ" 

有没有解决这个问题?

如果一个单词字符没有被另一个单词字符(或等于\W\w\w\W )所左右,那么单词边界断言只能匹配。 \w被定义为[A-Za-z0-9_] 。 所以\w不匹配希腊字符。 因此你不能在这种情况下使用\b

你可以做的是使用这个:

 "αβ αβγ γαβ αβ αβ".replace(/(^|\s)αβ(?=\s|$)/g, "$1AB") 

并非所有的Javascript regexp实现都支持Unicode广告,所以你需要转义它

 "αβ αβγ γαβ αβ αβ".replace(/\u03b1\u03b2/g, "AB"); // "AB ABγ γAB AB AB" 

为了映射字符,您可以查看http://htmlhelp.com/reference/html40/entities/symbols.html

当然,这对于边界问题没有帮助(正如其他答案中所解释的),但至less应该使您能够正确匹配字符

我需要一些可编程的东西来处理标点,括号等

http://jsfiddle.net/AQvyd/

 var wordToReplace = '買い手', replacementWord = '[[BUYER]]', text = 'Mange 買い手 information. The selected Store and Classification will be the default on the สั่งซื้อ.' function replaceWord(text, wordToReplace, replacementWord) { var re = new RegExp('(^|\\s|\\(|\'|"|,|;)' + wordToReplace + '($|\\s|\\)|\\.|\'|"|!|,|;|\\?)', 'gi'); return text.replace(re, replacementWord); } 

我已经写了一个JavaScript资源编辑器,所以这就是为什么我find了这个页面,也回答了它的必要性,因为我找不到一个字面界限parametricized正则expression式运行良好的Unicode。

并不是所有与JavaScript引擎相关的RegEx的实现都能够识别unicode。

例如,微软在IE中使用的JScript仅限于ANSI。

当处理Unicode和自然语言的单词时,您可能希望比使用\b更加谨慎。 看到这个答案的细节和方向。