【问题标题】:replace a word in text with javascript but not if the word is in a bigger word.用 javascript 替换文本中的单词,但如果该单词在更大的单词中,则不替换。
【发布时间】:2014-08-25 15:24:27
【问题描述】:

您好,我想替换文本字符串中的单词,但这似乎比我想象的要难。它应该在javascript中。说我的话是“离子”。当我在文本中看到它应该替换:我的离子,“离子”,离子:很酷,(离子),[离子]。但不是当它是另一个词的一部分时,比如位置(位置)。

可能应该用正则表达式来完成,但我不知道怎么做。

【问题讨论】:

标签: javascript regex text replace


【解决方案1】:

试试/(\bion\b)/gi

\b    assert position at a word boundary
i     modifier: insensitive. Case insensitive match (ignores case of [a-zA-Z])
g     modifier: global. All matches (don't return on first match)

括号用于对可以从索引 1 重试的匹配进行分组。

这是regex101上的演示


示例代码:(如果只想替换就不用分组了

str.replace(/\bion\b/gi, "XYZ");

【讨论】:

  • 您不需要分组。使用替换它可能看起来像这样: str.replace(/\bion\b/gi, "REPLACE");
  • 如果 OP 有兴趣获取匹配组,则需要 (),但不需要分组。是的,你是对的@morja 谢谢。
  • 我已经对该评论投了赞成票。 @AvinashRaj 缺少一件事 gi 需要全局搜索以及忽略大小写。
【解决方案2】:

您可以制作正则表达式,它会显示如下内容:[not a letter]ion[not a letter]。

这看起来像:[^a-zA-Z]ion[^a-zA-Z]

编辑:

要保留周围的字符,您需要使用占位符。所以最终的解决方案看起来像:str.replace(/([^a-zA-Z])ion([^a-zA-Z])/g, '$1REPLACED$2') REPLACED 显然是您想要替换的词。

【讨论】:

  • 这将不匹配 (ion), [ion]
猜你喜欢
  • 1970-01-01
  • 2020-01-06
  • 2015-03-02
  • 2011-09-06
  • 2014-06-03
  • 1970-01-01
  • 2017-11-14
  • 1970-01-01
  • 2020-03-27
相关资源
最近更新 更多