0

これをどのように変更しますか:

a-10-b-19-c

このようなものに:

a-10-b-20-c

Javascriptで正規表現を使用していますか?

また、これを変更する必要があります。

a-10-b-19

これに:

a-10-b-20

私がこれまでに見つけた唯一の解決策は次のとおりです。

  • 元の文字列を逆にします->"c-91-b-01-a"
  • 最初の番号を見つける(と\d+)->"91"
  • それを逆にする->"19"
  • 数値に変換する(parseInt)->19
  • それに1を追加します->20
  • もう一度文字列に変換します(toString)->"20"
  • もう一度逆にします->"02"
  • 元の一致をこの新しい番号に置き換えます->"c-02-b-01-a"
  • 文字列を逆にする->"a-10-b-20-c"

私はSOの誰かがこれを行うためのより簡単な方法を持っていることを望んでいました...誰か?

4

5 に答える 5

4

これが簡単な方法です。

var str = 'a-10-b-19-c';
str = str.replace(/(\d*)(?=(\D*)?$)/, +str.match(/(\d*)(?=(\D*)?$)/)[0]+1);

+str.match19を見つけ、それに1を加算して、20を返します。+は、答えがintであることを確認します。19を見つけて、 20であったstr.replaceものに置き換えます。str.match

説明

  • (\d*)-任意の数字に一致
  • (?=...)-ポジティブルックアヘッド、正規表現の位置は変更されませんが、パターンがさらに下流に存在することを確認します。
  • (\D*)?$-必ずしもそうする必要はありませんが、数字以外のものと複数回一致してから、文字列の末尾と一致する可能性があります
于 2012-09-20T15:47:29.823 に答える
1
//replaces last digit sequences with 20
'a-10-b-19-c'.replace(/\d+(?!.*\d+)/, '20') 

/->正規表現の開始

\d+->任意の数字に一致(1つ以上)

(?!.*\d+)->将来の(1つ以上の)数字が見つからないという否定的な先読みアサーション

/->正規表現の終わり

編集:追加について読み直してください、

そのためにmatchを使用できます。例:

    var m ='a-10-b-19-c'.match(/\d+(?!.*\d+)/);
    'a-10-b-19-c'.replace(/\d+(?!.*\d+)/, parseInt(m[0]) + 1);
于 2012-09-20T16:13:06.643 に答える
1

これはさらに単純なものです:

str.replace(/(.*\D)(\d+)/, function(s, pfx, n) {return pfx + ((+n) + 1)})

また

str.replace(/.*\D(\d+)/, function(s, n) {return s.slice(0, -n.length) + ((+n) + 1)})

数字が文字列の最初のものである場合、これらはどちらも機能しませんが、これは次のように機能します。

(' ' + str).replace(/.*\D(\d+)/,
                    function(s, n) {
                      return s.slice(1, -n.length) + ((+n) + 1)
                    })

(Javascriptに3つの異なる部分文字列関数が必要なのはなぜですか?)

于 2012-09-20T18:12:05.817 に答える
0

これが私が考えることができる最も簡単な方法です:

var str = 'a-10-b-19-c';
var arr = str.split('-');
arr[3] = parseInt(arr[3]) + 1;
str = arr.join('-');

説明するために編集:

このsplit()メソッドは、パラメーター(この場合はハイフン)を受け取り、見つかったインスタンスごとに配列に分割します。この部分の実行後にJavaScriptコンソールに入力arrすると、次のようになります。["a", "10", "b", "19", "c"]

ここで4番目の項目を変更する必要があることがわかっています。これはインデックス3から。を介してアクセスされますarr[3]。この配列の各部分は文字列です。文字列を1ずつインクリメントしようとすると、文字列を1で連結するだけなので(JSは+加算と連結にforを使用します)parseInt()、加算を行う前にを使用して整数にする必要があります。

次に、このjoin()メソッドを使用して、配列を文字列に接着し直します。

于 2012-09-20T15:41:50.790 に答える
0

これを試してください:

var str='a-10-b-19-c';
var pattern=/\d+/g;
var matches=pattern.exec(str);
var last=matches[0];
while((matches=pattern.exec(str))!=null)
{
    last=matches[0];
}
var newStr=str.replace(last, parseInt(last)+1);
console.log(newStr);

コード出力a-10-b-20-c

于 2012-09-20T15:44:33.453 に答える