获取和更换使用JavaScript或jQuery的字符串中的最后一个号码(Get and repla

2019-07-29 23:48发布

如果我有字符串:

var myStr = "foo_0_bar_0";

我想我们应该有一个调用的函数getAndIncrementLastNumber(str)

所以,如果我这样做:

myStr = getAndIncrementLastNumber(str); // "foo_0_bar_1"

以上的考虑,有可能是另一种文本,而不是foobar ,有可能不是underscores或者可能有不止一个underscore ;

是否有任何方式JavaScriptjQuery.replace()和一些RegEx

Answer 1:

您可以使用正则表达式/[0-9]+(?!.*[0-9])/找到字符串中的最后一个数字(来源: http://frightanic.wordpress.com/2007/06/ 08 /正则表达式匹配,最后发生/ )。 此功能,使用与之相匹配的(),parseInt函数(即正则表达式)和替换(),应该做你需要的东西:

function increment_last(v) {
    return v.replace(/[0-9]+(?!.*[0-9])/, parseInt(v.match(/[0-9]+(?!.*[0-9])/), 10)+1);
}

也许不是非常有效的,但对于短字符串,它不应该的问题。

编辑:这里有一个稍微好一点的方式,用一个回调函数,而不是搜索字符串两次:

function increment_last(v) {
    return v.replace(/[0-9]+(?!.*[0-9])/, function(match) {
        return parseInt(match, 10)+1;
    });
}


Answer 2:

下面是我如何做到这一点:

function getAndIncrementLastNumber(str) {
    return str.replace(/\d+$/, function(s) {
        return ++s;
    });
}

小提琴

也或者这一点,特别感谢埃里克:

function getAndIncrementLastNumber(str) {
    return str.replace(/\d+$/, function(s) {
        return +s+1;
    });
}

小提琴



Answer 3:

试试这个演示,请 http://jsfiddle.net/STrR6/1/ http://jsfiddle.net/Mnsy3/

existingId = 'foo_0_bar_0';
newIdOnly = existingId.replace(/foo_0_bar_(\d+)/g, "$1");
alert(newIdOnly);

getAndIncrementLastNumber(existingId);

function getAndIncrementLastNumber(existingId){
    alert(existingId);
newId = existingId.replace(/(\d+)/g, function(match, number) {
    return parseInt(number) + 1;
});
alert(newId);
}
​

要么

   existingId = 'foo_0_bar_0';
newIdOnly = existingId.replace(/foo_0_bar_(\d+)/g, "$1");
alert(newIdOnly);

getAndIncrementLastNumber(existingId);

function getAndIncrementLastNumber(existingId){
    alert(existingId);
    newId = existingId.replace(/\d+$/g, function(number) {
    return parseInt(number) + 1;
});
alert("New ID ==> " + newId);
}
​


Answer 4:

将这些数字与一些字符分隔? 我从你的问题理解是你的字符串可能看起来像这样78_asd_0_798_fgssdflh__0_2323! 如果是这样的话,你首先需要去掉所有的字符,并在短短一气呵成下划线。 然后不管你已经剥离出来,你可以用逗号或一些东西代替。

所以,你基本上有STR1:78_asd_0_798_fgssdflh__0_2323; STR2:78,0,0,798,2323。

STR2不一定是字符串,要么是你可以将它们保存到一个变量数组,并获得最大数量,增加它。

我的下一个问题是,这是否足够问题了吗? 如果你有这种递增的编号来代替数量最多,那么你必须更换这个数字在STR1的发生,并与你的结果替换它。

希望这可以帮助。 对于更换使用jQuery,你也许可以看看JQuery的消除“ - ”从字符串的字符 ,这只是一个例子,但你将有一个想法。



Answer 5:

正则表达式试试这个:

function getAndIncrementLastNumber(str){
   var myRe = /\d+[0-9]{0}$/g;  
   var myArray = myRe.exec(str);
   return parseInt(myArray[0])+1;​
}

演示: http://jsfiddle.net/F9ssP/1/



Answer 6:

如果你想只得到字符串的最后一个数字,这是一个使用parseInt函数的好办法()

if(Stringname.substr(-3)==parseInt(Stringname.substr(-3)))
var b=Stringname.substr(-3);
else if(Stringname.substr(-2)==parseInt(Stringname.substr(-2)))
var b=Stringname.substr(-2);
else
var b=Stringname.substr(-1);

它检查并给出正确的答案,并将其存储在变量b为1位数字,高达3位数。 你可以把它做任何如果你有逻辑



Answer 7:

@Brilliant是正确的,+1,我只是想提供一个版本,他的回答与2条的修改:

  • 删除不必要的negative look-ahead运营商。
  • 添加到在末尾添加数量的能力,如果它不存在。

```

/**
 * Increments the last integer number in the string. Optionally adds a number to it
 * @param {string} str The string
 * @param {boolean} addIfNoNumber Whether or not it should add a number in case the provided string has no number at the end
 */
function incrementLast(str, addIfNoNumber) {
    if (str === null || str === undefined) throw Error('Argument \'str\' should be null or undefined');
    const regex = /[0-9]+$/;
    if (str.match(regex)) {
        return str.replace(regex, (match) => {
            return parseInt(match, 10) + 1;
        });
    }
    return addIfNoNumber ? str + 1 : str;
}

测试

describe('incrementLast', () => {
        it('When 0', () => {
            assert.equal(incrementLast('something0'), 'something1');
        });
        it('When number with one digit', () => {
            assert.equal(incrementLast('something9'), 'something10');
        });
        it('When big number', () => {
            assert.equal(incrementLast('something9999'), 'something10000');
        });
        it('When number in the number', () => {
            assert.equal(incrementLast('1some2thing9999'), '1some2thing10000');
        });
        it('When no number', () => {
            assert.equal(incrementLast('1some2thing'), '1some2thing');
        });
        it('When no number padding addIfNoNumber', () => {
            assert.equal(incrementLast('1some2thing', true), '1some2thing1');
        });
    });


文章来源: Get and replace the last number on a string with JavaScript or jQuery