人。
此功能出现问题
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'
感恩节和快乐的日子
答案 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
}
}
我希望这对其他人有所帮助。
感恩节和快乐的日子