我们有这样的文字:


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


要么


  这是一个测试:rep:rep2更多文本更多:rep2:rep其他文本qweqweqwe。 (没有空间)


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

问题:
当尝试使用类似的东西替换时:

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鸡蛋我好了”是-:rep:rep2还是:rep24?)

编辑:

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

10-04 22:31
查看更多