1

我们有这样的文字:

这是一个测试 :rep more text more more :rep2 another text text qweqweqwe。

或者

这是一个测试 :rep:rep2 more text more :rep2:rep another text text 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 进程相似。

4

2 回答 2

2

如果您的数据始终一致,请替换:rep2before :rep

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

于 2012-08-09T14:26:51.210 回答
2

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

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

(如果您不需要单词边界,则无法区分“hello I got :rep24 eggs”是什么意思——是:rep,:rep2还是:rep24?)

编辑:

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

于 2012-08-09T14:30:32.557 回答