Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/403.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
JavaScript、正则表达式,将前导零添加到字符串中包含的所有数字_Javascript_Regex_Printf - Fatal编程技术网

JavaScript、正则表达式,将前导零添加到字符串中包含的所有数字

JavaScript、正则表达式,将前导零添加到字符串中包含的所有数字,javascript,regex,printf,Javascript,Regex,Printf,这个Perl脚本就是我想在JavaScript()中实现的: 显然,sprintf在JavaScript中不可用,但我知道您可以构建一个直接对关注的数字工作的函数,但是在我的例子中,我有一个长字符串,其中可能包含多个数字,可以将以下字符串转换为:abc8 23 123(以6位数字为例) 所以要么是一些我没有得到的聪明的正则表达式,要么是找到某种方法将长字符串分割成一个由不同字符串和数字组成的数组,然后逐个处理数字 我真的想避免后一种方法,因为1)在这种情况下速度是一个问题,2)在正确的位置拆分字

这个Perl脚本就是我想在JavaScript()中实现的:

显然,sprintf在JavaScript中不可用,但我知道您可以构建一个直接对关注的数字工作的函数,但是在我的例子中,我有一个长字符串,其中可能包含多个数字,可以将以下字符串转换为:
abc8 23 123
(以6位数字为例)

所以要么是一些我没有得到的聪明的正则表达式,要么是找到某种方法将长字符串分割成一个由不同字符串和数字组成的数组,然后逐个处理数字

我真的想避免后一种方法,因为1)在这种情况下速度是一个问题,2)在正确的位置拆分字符串所涉及的正则表达式似乎比此时添加前导零更难


最后,使用JavaScript的regex还有其他方法吗?

您可以使用正则表达式查找数字,并用函数中的值替换它们:

s = s.replace(/\d+/g, function(m){
  return "00000".substr(m.length - 1) + m;
});
演示:

正则表达式非常简单,只需将修补后的数字传递给函数,然后将修改后的匹配项作为替换项返回

"abc8 23 123".replace(/\d+/g,function(x){ return zeroFill(parseInt(x),6) })
所需的
zeroFill
功能

function zeroFill( number, width ){
  if ( number.toString().length >= width )
    return number;
  return ( new Array( width ).join( '0' ) + number.toString() ).substr( -width );
}
或者。。。亚诺


(“0000”+var).切片(-4);//普通老JS
`0000${var}`.slice(-4);//性感的JS

第一次求值将变量
var
强制为字符串文字,并在其前面加上n0(因此对于
123
的值,我们以
“0000123”
结束,然后从字符串末尾开始的片段(负修饰符)向后计数n个字符(因此“0000123”或“0123”)

有趣的是,我可以定义一个全局常量(
const-ZedsPadBabyZedsPad='00000000000000';
),它可以用于几乎任何典型的潜在客户填充应用程序,从5位数的图像编号(img0011.jpg)到日期(02/01/04)到(军事)时间:(07:00)

不要0?s太酷了,弦,宝贝。

`WhatACROCK${'you'}`。切片(-4)/'ROCKyou'

又短又甜!顺便说一句,
m.length-1
而不仅仅是
m.length
,有什么原因吗?@Shaw:
m.length-1
是因为
“00000”
字符串没有多余的未使用的零,它只根据需要而定。由于
m
总是至少有一个字符长,所以只需要五个零来填充它,当
m.length
为1时,
m.length-1
给你0,这是字符串中返回所有五个零的起始位置。你可以使用
“000000”.substr(米长)
,也就是说,字符串的长度是您想要的位数,但字符串的第一个字符只是虚拟填充,从未使用过。很好,尽管Guffa的答案对我来说更简单/更快。感谢您花时间回答我的问题。是的,他的答案更简单。它还可以截断比填充长的数字.如果这不是问题,那么就使用并滥用它,~)
function zeroFill( number, width ){
  if ( number.toString().length >= width )
    return number;
  return ( new Array( width ).join( '0' ) + number.toString() ).substr( -width );
}