作为 this question 的跟进(不是我),我需要用 \\3n
替换 id 的前导数字(其中 n 是我们要替换的数字)。
一些例子:
"1foo" -> "\\31foo"
"1foo1" -> "\\31foo1"
"12foo" -> "\\31\\32foo"
"12fo3o4" -> "\\31\\32fo3o4"
"foo123" -> "foo123"
下面是一个替换数字的每个实例的解决方案,但我不知道足够的正则表达式来让它在遇到非数字时停止。
function magic (str) {
return str.replace(/([0-9])/g, "\\3$1");
}
...或者正则表达式是一种糟糕的方式吗?我想这很容易做到,只需手动遍历字符串的每个字符即可。
最佳答案
这是一种使用反向字符串 + 前瞻方法实现所需功能的方法:
function revStr(str) {
return str.split('').reverse().join('');
}
var s = "12fo3o4";
document.write(revStr(revStr(s).replace(/\d(?=\d*$)/g, function (m) {
return m + "3\\\\";
}))
);
正则表达式匹配一个数字,该数字后面可以跟 0 个或多个数字,直到反转字符串的结尾(实际上是开始)(使用 \d(?=\d*$)
).回调允许操纵匹配(我们只需添加反转的 \\
和 3
。然后,我们只需反转结果。
关于javascript - 用 Javascript 正则表达式替换前导数字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32224281/