使用 JavaScript 正则表达式替换文本中的类似字符串

replace similar string in a text using javascript regex

本文关键字:字符串 文本 JavaScript 正则表达式 替换 使用      更新时间:2023-09-26

我们有这样的文本:

这是一个测试 :rep 更多文本更多 :rep2 另一个文本文本 qweqweqwe。

这是一个测试 :rep:rep2 更多文本

更多 更多 :rep2:rep 另一个文本文本 qweqweqwe。(无空间)

我们应该将 :rep 替换为 TEXT1,将 :rep2 替换为 TEXT2。

问题:尝试使用类似以下内容进行替换时:

rgobj = new RegExp(":rep","gi");
txt = txt.replace(rgobj,"TEXT1");
rgobj = new RegExp(":rep2","gi");
txt = txt.replace(rgobj,"TEXT2");

我们在它们中都得到了 TEXT1,因为 :rep2 与 :rep 和 :rep 过程更快。

如果您要求:rep始终以单词边界结尾,请在正则表达式中明确说明:

new RegExp(":rep''b","gi");

(如果你不需要单词边界,你就无法区分"你好,我得到了:rep24 eggs"是什么意思 - 这是:rep:rep2,还是:rep24

编辑:

根据用户提供的匹配字符串的新信息,最佳解决方案是按长度对匹配字符串进行排序,并按该顺序执行替换。这样,最长的字符串将首先被替换,从而消除了长字符串的开头将被该长字符串中包含的较短子字符串匹配项部分替换的风险。因此,:replongeststr:replong之前被替换,在:rep之前被替换。

如果数据始终一致,请将 :rep2 替换为 :rep 之前

否则,您可以搜索:rep's,搜索关键字后面的空格。 只要确保你也更换了空间。