JS中字符串的增量数



我有这个正则表达式,但它不做我所期望的:

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);

相关内容

  • 没有找到相关文章

最新更新