13

我在 StackOverflow 中阅读了很多问答,但我仍然很难获得 RegEX。我有字符串12_13_12

如何将最后一次出现的 12 替换为 , aa

最终结果应该是12_13_aa

我真的很想很好地解释你是如何做到的。

4

3 回答 3

25

您可以使用此替换:

var str = '12-44-12-1564';
str = str.replace(/12(?![\s\S]*12)/, 'aa');
console.log(str);

解释:

(?!            # open a negative lookahead (means not followed by)
   [\s\S]*     # all characters including newlines (space+not space)
               # zero or more times
   12
)              # close the lookahead

换句话说,该模式意味着:12 后面没有另一个 12,直到字符串的末尾。

于 2013-07-23T11:35:34.597 回答
16
newString = oldString.substring(0,oldString.lastIndexOf("_")) + 'aa';
于 2013-07-23T11:20:32.357 回答
3

使用它String.replace并确保最后输入$结束:

repl = "12_13_12".replace(/12(?!.*?12)/, 'aa');

编辑:要在正则表达式中使用变量:

var re = new RegExp(ToBeReplaced);
repl = str.replace(re, 'aa');
于 2013-07-23T11:17:04.560 回答