2

私はこれを何時間も探していましたが、今は非常に醜い方法で終了しました(ただし、機能しています)。これを行うための再利用可能な良い方法を見つけたいと思います。

私はこのような文字列を持っています:

wanna[0].some[0].javascript

角かっこの間の最後の桁の出現を置き換えたい:

wanna[0].some[1].javascript

私はこの(醜い)方法で終了しました:

myString.replace(/\d].javascript$/, "1].javascript")

それに一致する最良の正規表現はどれですか?

myString.replace(/\d/, 1) // this should be for the first digit
myString.replace(/\d/g, 1) // this for every digit

否定的な先読みについて読んだことがありますが、JS がこれをサポートしているかどうかはまだわかりません。

4

2 に答える 2

4

負の先読みを使用して、一致する角かっこの後に角かっこがないことを確認します。

var text = 'wanna[0].some[0].javascript';

text = text.replace(/\[\d](?!.*\[)/, '[1]');

これがフィドルです:http://jsfiddle.net/bRkEP/

于 2013-02-15T16:24:48.237 に答える
0

先読みが必要な理由がわかりません。あなたが与えた答えは(醜いですが)うまくいくはずです。Crockford がJavaScript の否定的な先読みについて述べているように: 良い部分: 「これは良い部分ではありません。」

あなたが提供した行が機能していない場合は、角かっこをエスケープしていないことが原因だと思います。そのはず:

myString.replace(/\d\].javascript$/, "1].javascript");

また、見やすくするためにキャプチャを行うこともできます。

解決するのが奇妙な問題のように思えるというあなたの質問へのコメントに同意します。なぜ文字列の数字を変更するのですか? これは、数値変数を角かっこで囲んでインクリメントできるようにしたほうがよいように見えます。

于 2013-02-15T16:30:20.663 に答える