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

时间:2010-05-21 11:01:53

标签: javascript regex unicode utf-8 word-boundary

在JavaScript中:

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

正确地告诉我:

"AB abc cab AB AB"

当我使用utf-8字符时:

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

word boundary operator似乎不起作用:

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

有解决方法吗?

5 个答案:

答案 0 :(得分:25)

单词边界断言仅在单词字符前面或后面跟着另一个单词字符时才匹配(因此.\b.等于\W\w\w\W)。 \w定义为[A-Za-z0-9_]。所以\w与希腊字符不匹配。因此,在这种情况下你不能使用\b

你可以做的是使用它:

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

答案 1 :(得分:2)

并非所有Javascript regexp实现都支持Unicode广告,因此您需要将其转义

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

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

当然,这对单词边界问题没有帮助(如其他答案中所述),但至少应该能够让你正确匹配字符

答案 2 :(得分:2)

我需要可编程的东西并处理标点符号,括号等。

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资源编辑器,所以这就是为什么我找到了这个页面,并且还因为我找不到适用于Unicode的字边界参数化regexp而必须回答它。

答案 3 :(得分:1)

并非所有与Javascript引擎关联的RegEx实现都能识别unicode。

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

答案 4 :(得分:1)

当您处理Unicode和自然语言单词时,您可能希望对边界更加小心,而不仅仅是使用\b。有关详细信息和说明,请参阅this answer