我们有一个类似的文字:
这是一个测试:代表更多文本更多: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 proccess类似。
答案 0 :(得分:2)
如果您的数据始终一致,请在:rep2
之前替换:rep
。
否则,您可以搜索:rep\s
,搜索关键字后面的空格。只要确保你也替换空间。
答案 1 :(得分:2)
如果您要求 :rep
始终以单词边界结尾,请在正则表达式中明确指出:
new RegExp(":rep\\b","gi");
(如果你不需要单词边界,你无法区分“你好我得到了什么:rep24 eggs” - 是 :rep
,{{ 1}},或:rep2
?)
修改强>
根据用户提供的匹配字符串的新信息,最佳解决方案是按长度对匹配字符串进行排序,并按该顺序执行替换。这样,最长的字符串首先被替换,消除了长字符串的开头将被该字符串中包含的较短子字符串匹配部分替换的风险。因此,在:rep24
之前替换:replongeststr
之前替换:replong
。