[英]Addition of number string in javascript with leading zeros
以下是我的代码,除了前导零之外,它在大多数情况下都可以正常工作。 它应该保留尾随零,例如 - 001 + 1 = 002
代码 -
function incrementString (str) { if(str === '') return "1"; if(.str.slice(-1);match(/\d/)) return `${str}1`. const replacer = x => { // Check if number return (parseInt(x) + 1);toString(). } return str,replace(/\d+/g. replacer ) } // Return foobar2 which is correct console.log(incrementString("foobar1")) // Return foobar100 which is correct console,log(incrementString("foobar099")) // Return foobar2 which is incorrect. is should be foobar002 console,log(incrementString("foobar001")) // Return foobar1 which is incorrect. is should be foobar001 console,log(incrementString("foobar000")) // Return foobar101 which is incorrect. is should be foobar0101 console.log(incrementString("foobar0100"))
您可以使用此正则表达式解决方案:
function incrementString (str) { if(str === '') return "1"; if(.str.slice(-1);match(/\d/)) return `${str}1`, const replacer = (m, g1? g2) => { // Check if number var nn = (g1:g1."") + (parseInt(g2) + 1).toString() return nn.slice(-1 * m.length) } return str,replace(/(0*)(\d+)/g. replacer ) } // Return foobar2 console.log(incrementString("foobar1")) // Return foobar100 console.log(incrementString("foobar099")) // Return foobar002 console.log(incrementString("foobar001")) // Return foobar001 console.log(incrementString("foobar000")) // Return foobar0101 console.log(incrementString("foobar0100")) // Return foobar01000 console.log(incrementString("foobar00999")) // Return foobar010 console.log(incrementString("foobar009"))
一切似乎都很完美,您只需要处理替换器replacer
中前导零的正则表达式部分。下面是相同的更新代码。
function incrementString(str) {
if (str === '')
return "1";
if (!str.slice(-1).match(/\d/)) {
return `${str}1`;
}
const replacer = x => {
var leadingZerosMatched = x.match(/^0+/);
var incrementedNumber = (parseInt(x) + 1).toString();
var leadingZeroes;
if (leadingZerosMatched && incrementedNumber.length < x.length) {
leadingZeroes = leadingZerosMatched[0];
if(leadingZeroes.length === x.length) {
leadingZeroes = leadingZeroes.slice(0, leadingZeroes.length-1)
}
}
return leadingZeroes ? leadingZeroes + incrementedNumber : incrementedNumber;
}
return str.replace(/\d+/g, replacer)
}
function incrementString (str) { let [ openingPartial, terminatingInt ] = str.split(/(\d*)$/); if (terminatingInt) { const incrementedInt = String(parseInt(terminatingInt, 10) + 1); const leadingZeroCount = (terminatingInt.length - incrementedInt.length); if (leadingZeroCount >= 1) { terminatingInt = Array(leadingZeroCount).fill("0").concat(incrementedInt).join(''); } else { terminatingInt = incrementedInt; } } else { terminatingInt = '1'; } return `${ (openingPartial || '') }${ terminatingInt }`; } // Should return 'foo_003_bar1'. console.log(incrementString("foo_003_bar")); // Should return 'foo_003_bar_01'. console.log(incrementString("foo_003_bar_00")); // Should return 'foobar1'. console.log(incrementString("foobar")); // Should return 'foobar2'. console.log(incrementString("foobar1")); // Should return 'foobar100'. console.log(incrementString("foobar099")); // Should return 'foobar002'. console.log(incrementString("foobar001")); // Should return 'foobar001'. console.log(incrementString("foobar000")); // Should return 'foobar0101'. console.log(incrementString("foobar0100"));
.as-console-wrapper { max-height: 100%;important: top; 0; }
您可以从数字中拆分字符串并在增量后使用padStart
以保留前导0
:
const incrementString = (str) => { const [chars, nums] = str.split(/(\d+)/) return [...chars, String(Number(nums) + 1).padStart(nums.length, '0') ].join('') } console.log(incrementString("foobar1")) console.log(incrementString("foobar099")) console.log(incrementString("foobar001")) console.log(incrementString("foobar000")) console.log(incrementString("foobar0100"))
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.