我有这个正则表达式,但它不做我所期望的:
name.replace(/sors*(d+).s*szék/, function () {
return arguments[1] * 1 + 1;
});
字符串是1. sor 1. szék
。我期望返回1. sor 2. szék
,返回值为:1. 2
。为什么?
您可以简化正则表达式,仅用递增的值替换第二次出现的数字。
const
string = '1. sor 1. szék.',
result = string.replace(/d+/g, (c => v => c-- ? v : +v + 1)(1));
console.log(result);
您将获得值1. 2
,因为模式sors*(d+).s*szék
与前导1.
不匹配,因此将不受影响。
部分arguments[1] * 1
是1,然后你加1得到2。
如果您想使用replace,可以使用3个捕获组,并在替换中使用,将组参数传递给replace的回调函数。
捕获的数字属于第2组,为了防止两个字符串连接,可以在第2组之前添加+
。
let name = "1. sor 1. szék";
name = name.replace(
/(sors*)(d+)(.s*szék)/,
(m, g1, g2, g3) => `${g1}${+g2+1}${g3}`
);
console.log(name);