繁体   English   中英

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

[英]JavaScript, Regex, add leading zero to ALL number contained in string

这个Perl脚本是我要在JavaScript中实现的( 源代码 ):

s/([0-9]+)/sprintf('%04d',$1)/ge;

显然sprintf在JavaScript中不可用,但是我知道您可以构建一个直接处理关注数量的函数,但是就我而言,我有一个长字符串,其中可能包含多个数字以将字符串转换为: abc8 23 123到: abc000008 000023 000123 (以6位数字为例)。

因此,这要么是我没有得到的巧妙的正则表达式,要么是找到某种方法将长字符串拆分成由不同的字符串和数字组成的数组,并且仅对数字进行逐一处理。

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

最后,使用JavaScript的正则表达式还有其他方法吗?

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

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

演示: http//jsfiddle.net/Guffa/sEUHY/

http://jsfiddle.net/hHfUC/1/

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

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

还是yanno

("0000"+var).slice(-4); // Normal old JS `0000${var}`.slice(-4); // Sexier JS

第一个求值将变量var强制为字符串文字,在其前加上n 0(因此对于123的值,我们以"0000123" ,然后从字符串末尾开始的切片(负修饰符)向后计数n字符(例如“ 000 0123 ”或“ 0123”)。

这里最可爱的部分是我可以定义一个全局常量( const ZedsPadBabyZedsPad='00000000000000'; ),然后将其用于几乎所有典型的填充应用程序,从5位图像编号(img00011.jpg)到至今(02 / (01/04)至(军事)时间:(07:00)。

不想为0? s'cool。 宝贝,STRING。 `WhatACROCK${'you'}`.slice(-4) // 'ROCKyou'

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM