我想用正则表达式替换西里尔字符的字符串。我想使用完全匹配选项。我的字符串替换正在使用拉丁字符,看起来像这样:
'Edin'.replace(/\Edin\b/gi, ''); // Output is ""
同一表达不适用于西里尔字符
'Един'.replace(/\Един\b/gi, ''); // Output is still 'Един'
答案 0 :(得分:7)
这里的问题是\b
字边界字符,它匹配字边界处的位置。字边界定义为(^\w|\w$|\W\w|\w\W)
。轮流word character \w
是一组ASCII字符[A-Za-z0-9_]。显然,西里尔字符不属于这一组。
例如,出于同样的原因/\w+/
正则表达式与Cyrillyc字符串不匹配。
答案 1 :(得分:4)
正如 dfsq 所写,问题在于字边界。
如果删除\b
,您将得到所需的输出,但它是完全不同的正则表达式。如果它是单词的一部分,它也会替换Един。为避免这种情况,您可以使用negative lookahead并定义不应出现在后面的字母,因为它们可能是单词的一部分。
'Един'.replace(/\Един(?![A-я])/gi, '');