此代码的目的是编写一个递增字符串的函数,以创建一个新字符串。如果字符串已经以数字结尾,则该数字应增加1.如果字符串不以数字结尾,则应将数字1附加到新字符串。例如" foo123" - > " foo124"或" foo" - > " foo1&#34 ;. 使用下面的代码,几乎我的所有测试用例都被传递,除了#34; foo999"没有打印出来" foo1000"。我知道应该有一种方法可以用正则表达式来解决我的问题,但我不太熟悉它。有人可以帮忙吗?
function incrementString (input) {
var reg = /[0-9]/;
var result = "";
if(reg.test(input[input.length - 1]) === true){
input = input.split("");
for(var i = 0; i < input.length; i++){
if(parseInt(input[i]) === NaN){
result += input[i];
}
else if(i === input.length - 1){
result += (parseInt(input[i]) + 1).toString();
}
else{
result += input[i];
}
}
return result;
}
else if (reg.test(input[input.length - 1]) === false){
return input += 1;
}
}
&#13;
答案 0 :(得分:2)
您可以使用替换回调:
'foo'.replace(/(\d*)$/, function($0, $1) { return $1*1+1; });
//=> "foo1"
'foo999'.replace(/(\d*)$/, function($0, $1) { return $1*1+1; });
//=> "foo1000"
'foo123'.replace(/(\d*)$/, function($0, $1) { return $1*1+1; });
//=> "foo124"
<强>解释强>
/(\d*)$/ # match 0 or more digits at the end of string
function($0, $1) {...} # callback function with 2nd parameter as matched group #1
return $1*1+1; # return captured number+1. $1*1 is a trick to convert
# string to number
答案 1 :(得分:0)
我认为您可以大大简化您的代码:
function incrementString(input) {
var splits = input.split(/(\d+)$/),
num = 1;
if (splits[1] !== undefined) num = parseInt(splits[1]) + 1;
return splits[0] + num;
}
这将检查字符串末尾的任意位数。
答案 2 :(得分:0)
function pad(number, length, filler) {
number = number + "";
if (number.length < length) {
for (var i = number.length; i < length; i += 1) {
number = filler + number;
}
}
return number;
}
function incrementString (input) {
var orig = input.match(/\d+$/);
if (orig.length === 1) {
orig = pad(parseInt(orig[0]) + 1, orig[0].length, '0');
input = input.replace(/\d+$/, orig);
return input;
}
return input + "1";
}
它做了什么?
首先检查是否有尾随号码。如果是的话,增加它并用零填充它(使用“pad”功能,您可以自己对其进行排序)。
string.replace
是一个函数,它使用参数1搜索子字符串(string,regex),参数2作为要替换的元素(字符串,函数)。
在这种情况下,我使用正则表达式作为第一个参数和递增的填充数字。
正则表达式非常简单:\d
表示“整数”,+
表示“前面的一个或多个”,表示一个或多个数字。 $
表示字符串的结尾。
有关正则表达式的更多信息(在JavaScript中):https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Global_Objects/RegExp(感谢@Casimir et Hippolyte的链接)
答案 3 :(得分:0)
function incrementString (strng) {
//separateing number from string
let x = (strng).replace( /^\D+/g, '');
//getting the length of original number from the string
let len = x.length;
//getting the string part from strng
str = strng.split(x);
//incrementing number by 1
let number = Number(x) + 1 + '';
//padding the number with 0 to make it's length exactly to orignal number
while(number.length < len){
number = '0' + number;
}
//new string by joining string and the incremented number
str = (str + number).split(',').join('');
//return new string
return str;
}
答案 4 :(得分:0)
我的快速答案是:
let newStr = string.split('');
let word = [];
let num = [];
for (let i = 0 ; i<string.length ;i++){
isNaN(string[i])? word.push(string[i]) : num.push(string[i])
}
let l=num.length-1;
let pureNum=0;
for (let i = 0 ; i<num.length ;i++){
pureNum += num[i] * Math.pow(10,l);
l--;
}
let wordNum = (pureNum+1).toString().split('');
for (let i = wordNum.length ; i<num.length ;i++){
wordNum.unshift("0");
}
return word.join("")+wordNum.join("");
}
答案 5 :(得分:0)
我见过的最简洁的方法也可以解释前导零、非数字结尾和空字符串:
''.replace(/[0-8]?9*$/, w => ++w)
//=> 1
'foo'.replace(/[0-8]?9*$/, w => ++w)
//=> foo1
'foo099'.replace(/[0-8]?9*$/, w => ++w)
//=> foo100
'foo999'.replace(/[0-8]?9*$/, w => ++w)
//=> foo1000