Javascript+;正则表达式从字符串中获取第一个非零数字

Javascript+;正则表达式从字符串中获取第一个非零数字,javascript,regex,Javascript,Regex,我已经通读了所有建议的问题,但都是关于小数(数学函数有用的地方)或逗号之类的单个字符 我有一个字符串“EH00011”,我需要从中提取数字部分,以便迭代并输出“EH00012”。我尝试只获取最后五个字符并使用parseInt()。这适用于单个数字实例(00005),但不适用于10-19或任何其他可解释为二进制的数字。对于00011,它将转换为9,然后迭代为10,而不是转换为11,然后迭代为12。在正则表达式之外,我想到的最好的办法是循环遍历每个字符,直到得到一个非零,然后输出所有字符。但我想一定

我已经通读了所有建议的问题,但都是关于小数(数学函数有用的地方)或逗号之类的单个字符

我有一个字符串“EH00011”,我需要从中提取数字部分,以便迭代并输出“EH00012”。我尝试只获取最后五个字符并使用parseInt()。这适用于单个数字实例(00005),但不适用于10-19或任何其他可解释为二进制的数字。对于00011,它将转换为9,然后迭代为10,而不是转换为11,然后迭代为12。在正则表达式之外,我想到的最好的办法是循环遍历每个字符,直到得到一个非零,然后输出所有字符。但我想一定有更好的方法使用正则表达式

所以,我需要一个正则表达式(或者在我的思维过程之上的其他方法),它可以接受字符串“00011”并输出11。我想它会和我的循环选项一样,查找第一个非零值并返回所有内容,包括该字符和该字符之后的内容

编辑:正如建议的那样,我只是简单地将基数参数集添加到了10,它可以完美地工作。不需要正则表达式或其他附加代码

您可以将
parseInt()
与正则表达式结合使用:

let code = "EH00012".replace(/[^0-9]/g, ''); // strip all non-numeric chars
let num = parseInt(code, 10); // final number 12
这将导致您正在查找的内容
12

您可以将
parseInt()
与regex结合使用:

let code = "EH00012".replace(/[^0-9]/g, ''); // strip all non-numeric chars
let num = parseInt(code, 10); // final number 12
您可以使用
.replace()
替换为
RegExp
/\d/g
/\d/g
替换字符串的数字和非数字部分,而
则循环连接
“0”
如果字符串的两个部分的
长度
都小于原始字符串
。长度

let str=“EH00011”;
const len=str.length;
函数incrementNumberString(s,l=len){
让[chars,nums]=[s.replace(/\d/g,”),`${+s.replace(/\d/g,”)+1}`];
而(chars.length+nums.length
您可以使用
.replace()
替换为
RegExp
/\d/g
/\d/g
替换字符串的数字和非数字部分,
,而
循环连接
“0”
如果字符串的两个部分的
长度
都小于原始字符串
。长度

let str=“EH00011”;
const len=str.length;
函数incrementNumberString(s,l=len){
让[chars,nums]=[s.replace(/\d/g,”),`${+s.replace(/\d/g,”)+1}`];
而(chars.length+nums.length}
如果使用不带基数的
parseInt
,则以0开头的字符串将得到八进制。在我的示例中,我没有使用
parseInt
,而是使用了一元
+
,它不会遇到这个问题。RegExp保证我们不必处理非整数或带前缀的十六进制

var str='EH0000000';
对于(变量i=0;i<20;++i){
str=str.replace(/\d+$/,函数(num){
var out=`${+num+1}`;
返回num.slice(0,-out.length)+out;
});
console.log(str);

}
如果使用不带基数的
parseInt
,则以0开头的字符串将得到八进制。在我的示例中,我没有使用
parseInt
,而是使用了一元
+
,它不会遇到这个问题。RegExp保证我们不必处理非整数或带前缀的十六进制

var str='EH0000000';
对于(变量i=0;i<20;++i){
str=str.replace(/\d+$/,函数(num){
var out=`${+num+1}`;
返回num.slice(0,-out.length)+out;
});
console.log(str);

}
是预期结果
“EH00012。”
“12”
?听起来好像您没有为parseInt()指定基数,即parseInt(12)将默认为八进制,而parseInt(12,10)将强制为十进制。您使用的浏览器是什么,因为大多数JS引擎现在都设置了默认基数10。为简单起见,您还可以将
/[1-9][0-9]*/
匹配并提取第一项
.match(/[1-9][0-9]*/)[0]
^^喜欢上面的解决方案@jeff我正在使用Google ChromeIs的预期结果
“EH00012。”
“12”
?听起来好像您没有指定parseInt()的基数,即parseInt(12)将默认为八进制,而parseInt(12,10)将强制为十进制。您使用的浏览器是什么,因为大多数JS引擎现在都设置了默认基数10。为简单起见,您还可以将
/[1-9][0-9]*/
匹配并提取第一项
.match(/[1-9][0-9]*/)[0]
^^喜欢上面的解决方案@杰夫,我在谷歌浏览器上