【问题标题】:How can you keep the leading zeros in a new Number() in JavaScript [duplicate]如何在 JavaScript 中的 new Number() 中保留前导零 [重复]
【发布时间】:2018-12-28 18:17:13
【问题描述】:

伙计们。

我在使用此功能时遇到了一些问题

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"

我不知道是否可以使用替换和正则表达式来实现,我想到了一个带有循环、.length、拆分等的解决方案...,但我想用正则表达式来实现,如果可能的话.

问题:如何获取字符串末尾的数字,前导零,并将它们相加为 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'

感恩节快乐

【问题讨论】:

标签: javascript regex string


【解决方案1】:

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

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

【讨论】:

  • 第 2 行是否正在创建 vars 并将值 s.split(/(\d*$)/) 分配给左侧并将 '0' 分配给右侧?这种语法怎么称呼?我以前从未见过。
  • 这是一个destructuring assignment
【解决方案2】:

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

最后,我用“数字串”和 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
  }
}

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

感恩节快乐

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-09-16
    • 2013-08-11
    • 2022-01-04
    • 2023-01-22
    • 2023-03-03
    • 2020-06-11
    • 1970-01-01
    相关资源
    最近更新 更多