10

文字列がある場合:

var myStr = "foo_0_bar_0";

と呼ばれる関数が必要だと思いますgetAndIncrementLastNumber(str)

だから私がこれを行うと:

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

fooおよびの代わりに別のテキストが存在する可能性があり、存在barしないunderscores か、複数存在する可能性があることを考慮してunderscore;

JavaScriptと、またはjQuery.replace()いくつかの方法はありますかRegEx

4

7 に答える 7

17

正規表現/[0-9]+(?!.*[0-9])/を使用して、文字列の最後の数字を見つけることができます(ソース: http: //frightanic.wordpress.com/2007/06/08/regex-match-last-occurrence/)。この関数は、match()、parseInt()、replace()でその正規表現を使用して、必要なことを実行する必要があります。

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

おそらくそれほど効率的ではありませんが、短い文字列の場合は問題になりません。

編集:文字列を2回検索する代わりに、コールバック関数を使用する、少し良い方法があります。

function increment_last(v) {
    return v.replace(/[0-9]+(?!.*[0-9])/, function(match) {
        return parseInt(match, 10)+1;
    });
}
于 2012-06-15T22:52:54.813 に答える
7

これが私がそれをする方法です:

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

フィドル

またはこれも、エリックに感謝します。

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

フィドル

于 2012-06-15T22:56:38.490 に答える
1

このデモをお試しください 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);
}
​
于 2012-06-15T22:57:52.183 に答える
1

@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');
        });
    });
于 2017-05-22T23:14:46.820 に答える
0

正規表現でこれを試してください:

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/

于 2012-06-15T22:52:58.947 に答える
0

数字はいくつかの文字で区切られますか?あなたの質問から私が理解したのは、あなたの文字列はこのように見えるかもしれないということです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を調べて、文字列から「-」文字を削除することができます。これは単なる例ですが、アイデアが得られます。

于 2012-06-15T22:59:18.320 に答える
0

文字列の最後の数だけを取得したい場合は、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桁までの数値を格納します。あなたが論理を持っていればあなたはそれを作ることができます

于 2013-09-19T08:53:32.383 に答える