Javascript + REGEX从字符串中获取第一个非零数字

时间:2017-09-19 03:01:56

标签: javascript regex

我已经阅读了所有建议的问题,但所有问题都处理小数(数学函数有用)或单个字符(如逗号)。

我有一个字符串" EH00011"从中我需要提取数字部分,以便我可以迭代并输出" EH00012。"我尝试简单地获取最后五个字符并使用parseInt()。这适用于单位数实例(00005),但不适用于10-19或任何其他可以解释为二进制的数字。在00011的情况下,它转换为9,然后迭代到10,而不是转换为11并迭代到12.我在Regex之外想到的最好的想法是循环每个字符,直到我到达非零然后输出所有内容。但我认为正则表达式必须有更好的方法。

所以,我需要一个正则表达式(或者我的思维过程之上的其他方法),它可以带一个字符串" 00011"输出11.我认为它会像我的循环选项一样,查找第一个非零值并返回包含该字符后的所有内容。

编辑:正如所建议的,我只是将基数参数设置为10并且它完美地运行。无需REGEX或其他额外代码!

3 个答案:

答案 0 :(得分:1)

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

let code = "EH00012".replace(/[^0-9]/g, ''); // strip all non-numeric chars
let num = parseInt(code, 10); // final number 12

应该会导致您正在寻找12

答案 1 :(得分:1)

您可以.replace()使用RegExp /\d/g/\D/g来替换字符串的数字和非数字部分,while循环以连接{{1}如果字符串的两个部分的"0"小于原始字符串.length

,则增加数字部分后的字符串部分



.length




答案 2 :(得分:0)

如果您在没有基数的情况下使用parseInt,您将获得以0开头的字符串的八进制。而不是使用parseInt我在我的网格中使用了一元+例如,这个问题并没有受到影响。 RegExp保证我们不必与非整数或0x前缀十六进制竞争。



var str = 'EH0000000';

for (var i = 0 ; i < 20 ; ++i) {
    str = str.replace(/\d+$/, function(num) {
        var out = `${+num + 1}`;
        return num.slice(0, -out.length) + out;
    });

    console.log(str);
}
&#13;
&#13;
&#13;

我已使用$将我的RegExp锚定到字符串的末尾。这并不是严格要求的,但却不知道格式是什么,这似乎是一种明智的预防措施。

要进行0填充,我只是将数字的原始字符串形式切成薄片。这里的关键是当我们达到10的幂时,我们需要009成为010而不是0010