替换功能仅替换每秒正则表达式匹配

时间:2014-07-30 10:38:38

标签: javascript regex

我想在javascript中使用正则表达式在每个只有一位数的数字之前加零。

当我调试chrome调试器中的代码时,它给了我一个奇怪的结果,其中只有每一秒匹配零。

我的正则表达式

"3-3-7-3-9-8-10-5".replace(/(\-|^)(\d)(\-|$)/g, "$10$2$3");

我得到的结果

"03-3-07-3-09-8-10-05"

感谢您的帮助

3 个答案:

答案 0 :(得分:3)

使用字边界,

(\b\d\b)

替换字符串:

0$1

DEMO

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