【问题标题】:String replace exact match in cyrillic西里尔文字符串替换完全匹配
【发布时间】:2014-09-26 21:44:07
【问题描述】:

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

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

相同的表达式不适用于西里尔字符

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

【问题讨论】:

标签: javascript regex


【解决方案1】:

这里的问题是\b 词边界字符,它匹配词边界的位置。字边界定义为(^\w|\w$|\W\w|\w\W)。而 word character \w 又是一组 ASCII 字符 [A-Za-z0-9_]。显然西里尔字符不属于这个集合。

例如,出于同样的原因,/\w+/ 正则表达式不会匹配 Cyrillyc 字符串。

【讨论】:

  • 那很好。它解释了为什么它不起作用,但有解决方案。
【解决方案2】:

正如 dfsq 所写,问题在于单词边界。 如果您删除\b,您将获得所需的输出,但它是完全不同的正则表达式。如果它是单词的一部分,它也会替换 Един。为避免这种情况,您可以使用negative lookahead 并定义哪些字母不应出现在后面,因为它们可能是单词的一部分。

'Един'.replace(/\Един(?![A-я])/gi, ''); 

【讨论】:

  • @user732456 也可以试试(?![\wЁ-ЌЎ-џ])作为边界(regex101)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2020-01-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-04-10
相关资源
最近更新 更多