【发布时间】:2020-04-10 21:10:53
【问题描述】:
我有以下日期时间字符串 2020-5-1 1:2 我使用模式 (\W)(\d{1}) 匹配长度为 1 的任何数字,即非零前导 5,1,1,2。 This demo 表明该模式在每场比赛中都成功地在第 2 组中抓住了他们。
使用 Javascript 的 String replace 方法,我尝试将日期时间示例字符串转换为 2020-05-01 01:02。在 this jsbin 中运行以下 sn-p:
var txt = '2020-5-1 1:2'
var output = [];
output[0] = txt.replace(/(\W)(\d{1})/gi,'0$1');
output[1] = txt.replace(/(\W)(\d{1})/gi,'0$2');
console.log(output);
// The output: ["20200-0-0 0:", "202005010102"]
在第一个输出的条目中,它出现了意想不到的行为,它没有将0 添加到匹配项中,而是将其替换为0!我该如何解决这个问题?
【问题讨论】:
-
使用
.replace(/(\W)(\d)/gi,'$10$2')或.replace(/\b\d\b/g,'0$&'),你忘记了第二个捕获的值。 -
顺便说一句,您也可以在同一个站点上尝试替换regex101.com/r/6NYGJG/2
-
@WiktorStribiżew 第二个正则表达式很有魅力。谢谢,但是解决方案中的
\b和&是什么?如果您能在回答中说明它们,我将不胜感激。 -
$&是对整个比赛的反向引用。\b是单词边界。如果您需要具体细节,请通过答案下方的评论告知。 -
非常感谢,这是一个非常有用的答案。
标签: javascript regex replace