在JavaScript中:

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

正确地给了我:

"AB abc cab AB AB"

当我使用UTF-8字符时:

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

单词边界操作员 似乎不起作用:

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

有针对这个的解决方法吗?

有帮助吗?

解决方案

单词边界断言只有在一个单词字符之前或之后是另一个单词字符时才匹配(所以 .\b. 等于 \W\w\w\W)。和 \w 被定义为 [A-Za-z0-9_]. 。所以 \w 不匹配希腊角色。因此,您不能使用 \b 对于这种情况。

您可以做的是使用此操作:

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

其他提示

并非所有JavaScript Regexp实施都支持Unicode AD,因此您需要逃脱它

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

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

当然,这无助于“边界”问题(如其他答案中所述),但至少应该使您能够正确匹配字符

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

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资源编辑器,所以这就是为什么我找到了此页面并出于必要的回答,因为我找不到一个单词边界参数化的Regexp,它对Unicode效果很好。

并非所有与JavaScript引擎关联的正则实现都有Unicode意识到。

例如,使用IE中使用的Microsofts JScript仅限于ANSI。

当您处理Unicode和自然语言单词时,您可能希望更加谨慎,而不是仅使用 \b. 。看 这个答案 有关详细信息和方向。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top