22

在 JavaScript 中:

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

正确地给了我:

"AB abc cab AB AB"

当我使用 utf-8 字符时:

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

单词边界运算符似乎不起作用:

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

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

4

5 回答 5

27

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

你可以做的是使用这个:

"αβ αβγ γαβ αβ αβ".replace(/(^|\s)αβ(?=\s|$)/g, "$1AB")
于 2010-05-21T11:06:18.967 回答
2

并非所有 Javascript 正则表达式实现都支持 Unicode 广告,因此您需要对其进行转义

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

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

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

于 2010-05-21T11:18:28.330 回答
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 的字边界参数化正则表达式。

于 2013-03-13T05:29:35.273 回答
1

并非所有与 Javascript 引擎相关的 RegEx 实现都支持 unicode。

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

于 2010-05-21T11:06:20.293 回答
1

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

于 2010-11-18T13:40:09.880 回答