如何让 padStart 正确处理正则的分组标志如 $1 ?
在下面代码里,我想把"p"后面的数字补全到 3 位,但是我发现不管 p 后面是多少位,总是会在前面补齐一个 0。
var a='18917304_p1234';
a.replace(/(\d.*p)(\d.*)/,'$1'+('$2'.padStart(3, '0')));
// "18917304_p01234"
经过我的胡乱分析,可能是因为 padStart
并没有获取到 $2
的值,而是把 $2
当作了普通字符串。 $2
这两个字长度是 2,所以 padStart
总是会补齐一个 0。
后来换了种写法解决了,但是如果不改写,有更直接的办法处理这种情况吗?
a.replace(/(\d.*p)(\d.*)/,function (...str) {
return str[1]+str[2].padStart(3, '0');
});
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
你的猜测是正确的,这只是js基本语法的问题,和
replace
无关:当padStart
执行时,replace
还没有执行,此时$2
并不是一个变量所以
a.replace(/(\d.*p)(\d.*)/,'$1'+('$2'.padStart(3, '0')))
实际上就是
a.replace(/(\d.*p)(\d.*)/,'$1' + '0$2'))
当然,假若你想获取$1,$2的变量,可通过执行正则后再捕获,但不如你后续补充的答案简洁,如: