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应该使您能够正确匹配字符
我需要一些可编程的东西来处理标点,括号等
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
更加谨慎。 看到这个答案的细节和方向。