Question
스트링에서 넘버만 따다가 +1 하는것. 자릿수 지키기.
https://www.codewars.com/kata/string-incrementer/javascript
Your job is to write a function which increments a string, to create a new string.
If the string already ends with a number, the number should be incremented by 1.
If the string does not end with a number. the number 1 should be appended to the new string.
Examples:
foo -> foo1
foobar23 -> foobar24
foo0042 -> foo0043
foo9 -> foo10
foo099 -> foo100
Attention: If the number has leading zeros the amount of digits should be considered.
My answer
정규식으로 number만 따다가 +1 해주고 원래 자릿수를 구해서 0을 그만큼 채워줬다.
마음에 안 듦.
function incrementString (str) { const numRegex = /[0-9]+/.exec(str); if (numRegex) { const numStr = numRegex.pop(); const newNum = Number(numStr) + 1; const zeroNums = numStr.length - newNum.toString().length; const zeroStr = (zeroNums > 0) ? Array(zeroNums).fill("0").join("") : ""; return str.replace(numStr, `${zeroStr}${newNum}`) } return `${str}1`; }
Others' answer
Azuaron, Nakid..
function incrementString (input) { // 맨끝이 not a number면 그냥 + "1" if(isNaN(parseInt(input[input.length - 1]))) return input + '1'; // "001"을 넘겼다면 match는 001, p1은 00, p2는 1 return input.replace(/(0*)([0-9]+$)/, function(match, p1, p2) { var up = parseInt(p2) + 1; // +1한 숫자 자릿수가 원본자릿수보다 크다면 0을 하나 뺀만큼 앞에 붙여주고 아니면 원본 0갯수만큼 붙여주기 return (up.toString().length > p2.length) ? p1.slice(0, -1) + up : p1 + up; }); }
- String.replace 첫번째 인자에 정규식을 넘길수 있고, 두 번째 인자에 함수를 넘길 수 있구나!
- 정규식에
()
으로 그룹을 지어서 두번째 이후 인자로 받을 수 있구나 - String.slice(0, -1)은 마지막 한글자를 떼는거구나