说我有一个字符串" abc123def45"
是否有可能,使用javascript正则表达式将字符串中的所有数字替换为相同长度或全部固定长度,例如6位数。
因此,如果采用6位数方法,结果字符串将是" abc000123def000045"
如果采用相同长度的方法(我怀疑使用正则表达式会变得更难),结果字符串将是" abc123def045"
我当然可以使用正则表达式找到所有数字:
\d+
但如何在替换中获得正确数量的前导零?
示例代码:
var s = "abc123def45";
var r = s.replace(/\d+/g, "000123"); // this is wrong of course
答案 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>