我想在javascript中使用正则表达式在每个只有一位数的数字之前加零。
当我调试chrome调试器中的代码时,它给了我一个奇怪的结果,其中只有每一秒匹配零。
我的正则表达式
"3-3-7-3-9-8-10-5".replace(/(\-|^)(\d)(\-|$)/g, "$10$2$3");
我得到的结果
"03-3-07-3-09-8-10-05"
感谢您的帮助
答案 0 :(得分:3)
使用字边界,
(\b\d\b)
替换字符串:
0$1
> "3-3-7-3-9-8-10-5".replace(/(\b\d\b)/g, "0$1")
'03-03-07-03-09-08-10-05'
<强>解释强>
(
第一个捕获组的起点。\b
单词字符与非单词字符匹配。\d
匹配一位数。\b
单词字符与非单词字符匹配。)
第一个捕获组结束。答案 1 :(得分:0)
您可以使用这个更好的基于前瞻性的正则表达式在每个数字前面加0
前缀:
"3-3-7-3-9-8-10-5".replace(/\b(\d)\b(?=-|$)/g, "0$1");
//=> "03-03-07-03-09-08-10-05"
您在正则表达式中获得备用前缀的原因:
"3-3-7-3-9-8-10-5".replace(/(\-|^)(\d)(\-|$)/g, "$10$2$3");
是,而不是向前看,你实际上是在数字之后匹配连字符。一旦连字符匹配,它就不会再次匹配,因为内部正则表达式指针已经向前移动。
答案 2 :(得分:0)
使用正向前瞻来查看一位数字:
"3-3-7-3-9-8-10-5".replace(/(?=\b\d\b)/g, "0");