如何在JavaScript中将前导零保留在新的Number()中

时间:2018-12-28 18:17:14

标签: javascript regex string

人。

此功能出现问题

const incrementString = str => {
  if (!str.match(/[\d+]$/)){
    return str += 1
  } else{
    return str.replace(/[\d+]$/, ch => new Number(ch) + 1)
  }
}

该函数的作用是在字符串末尾加1,如果字符串中没有数字,则在末尾加1。

string      expected
"foobar000" "foobar001"
"foo"       "foo1"
"foobar025" "foobar026"

我不知道是否可以使用replace和regex来实现它,我想到了一个使用循环,.length,split等的解决方案,但是我想使用regex来实现。

问题:如何将字符串末尾的数字与前导零相加,并将它们加1? 这是我的函数的不良行为的一些例子

Expected: 'foobar011', instead got: 'foobar11'
Test Passed: Value == 'foo1'
Expected: 'foobar002', instead got: 'foobar2'
Test Passed: Value == 'foobar100'
Test Passed: Value == 'foobar100'
Test Passed: Value == '1'

感恩节和快乐的日子

2 个答案:

答案 0 :(得分:6)

您可以存储数字字符串的长度,并在增加所需的前导零后应用。

function increment(s) {
    var [left, right = '0'] = s.split(/(\d*$)/),
        length = right.length;

    return left + (+right + 1).toString().padStart(length, '0');
}

console.log(['foobar000', 'foo', 'foobar025'].map(increment));

答案 1 :(得分:0)

我使用了所有提示和答案来检查解决问题的不同选项。

最后,我解决了“数字字符串”和padStart提示。

const incrementString = str => {
  if (str.match(/[0-9+]+/g)) {
    let numbers = str.replace(/[a-z+]+/g, "")
    return str.replace(numbers, (Number(numbers) + 1 + '').padStart(numbers.length, 0))
  } else {
    return str + 1
  }
}

我希望这对其他人有所帮助。

感恩节和快乐的日子