字符串替换西里尔语中的完全匹配

时间:2014-09-26 07:55:03

标签: javascript regex

我想用正则表达式替换西里尔字符的字符串。我想使用完全匹配选项。我的字符串替换正在使用拉丁字符,看起来像这样:

'Edin'.replace(/\Edin\b/gi, '');  // Output is ""

同一表达不适用于西里尔字符

'Един'.replace(/\Един\b/gi, '');  // Output is still 'Един'

2 个答案:

答案 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, '');