繁体   English   中英

在 javascript 中添加带有前导零的数字字符串

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM