是否可以使用正则表达式使用前导零替换字符串中的数字

时间:2014-05-08 09:42:43

标签: javascript regex

说我有一个字符串" abc123def45"

是否有可能,使用javascript正则表达式将字符串中的所有数字替换为相同长度或全部固定长度,例如6位数。

因此,如果采用6位数方法,结果字符串将是" abc000123def000045"

如果采用相同长度的方法(我怀疑使用正则表达式会变得更难),结果字符串将是" abc123def045"

我当然可以使用正则表达式找到所有数字:

\d+

但如何在替换中获得正确数量的前导零?

示例代码:

var s = "abc123def45";
var r = s.replace(/\d+/g, "000123"); // this is wrong of course

2 个答案:

答案 0 :(得分:3)

您可以使用:

var s = "abc123def45";
var r = s.replace(/\d+/g, function($0) {
      return new Array(6-$0.length+1).join('0')+$0; });
//=> "abc000123def000045"

答案 1 :(得分:2)

我想不出一种不在replace中使用函数作为回调的方式,例如:

var zeros = "0000000000";
var r = s.replace(/\d+/g, function(m) {
    return zeros.substring(0, 6 - m.length) + m;
});

完整示例:Live Copy

<!DOCTYPE html>
<html>
<head>
<meta charset=utf-8 />
<title>Zero Padding with RegEx</title>
</head>
<body>
  <script>
    (function() {
      "use strict";

      var s = "abc123def45";
      var zeros = "0000000000";
      var r = s.replace(/\d+/g, function(m) {
        return zeros.substring(0, 6 - m.length) + m;
      });
      display("Result: " + r);

      function display(msg) {
        var p = document.createElement('p');
        p.innerHTML = String(msg);
        document.body.appendChild(p);
      }
    })();
  </script>
</body>
</html>