在 JavaScript 中:
"ab abc cab ab ab".replace(/\bab\b/g, "AB");
正确给我:
"AB abc cab AB AB"
当我使用 utf-8 字符时:
"αβ αβγ γαβ αβ αβ".replace(/\bαβ\b/g, "AB");
在字边界运营商似乎没有工作时:
"αβ αβγ γαβ αβ αβ"
有针对这个的解决方法吗?
在 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 广告,因此您需要对其进行转义
"αβ αβγ γαβ αβ αβ".replace(/\u03b1\u03b2/g, "AB"); // "AB ABγ γAB AB AB"
要映射字符,您可以查看http://htmlhelp.com/reference/html40/entities/symbols.html
当然,这对单词边界问题没有帮助(如其他答案中所述),但至少应该使您能够正确匹配字符
我需要一些可编程的东西来处理标点符号、括号等。
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 的词边界参数化正则表达式。
并非所有与 Javascript 引擎相关的 RegEx 实现都支持 Unicode。
例如微软在 IE 中使用的 JScript 仅限于 ANSI。
当您处理 Unicode 和自然语言单词时,您可能希望比仅使用\b
. 有关详细信息和说明,请参阅此答案。