2013-07-23 6 views
12

私は多くを読んだQ & StackOverflowのように、私はまだRegExを取得するのに苦労しています。 私は文字列12_13_12を持っています。javascript最後の文字列を置換する

12の最後のオカレンスを、aaと置き換えるにはどうすればよいですか?

最終結果は12_13_aaである必要があります。

あなたのやり方についての良い説明が本当に好きです。

+0

最後の数字は常に2桁ですか? –

+0

@GintasK no ..それは常に2桁の数字を含んでいるので、他の数字の組み合わせは –

+0

'12_13_12'.replace(/ 12([^ 1] [^ 2])* $ /、' aa ')// 12それに続く12のパターンではない – TheOne

答えて

14
newString = oldString.substring(0,oldString.lastIndexOf("_")) + 'aa'; 
3

使用このString.replaceとあなたが最後に入力$の終わりを持っていることを確認してください。

repl = "12_13_12".replace(/12(?!.*?12)/, 'aa'); 

EDIT:正規表現で変数を使用するには:

var re = new RegExp(ToBeReplaced); 
repl = str.replace(re, 'aa'); 
+0

実際には –

+1

の例だったが、もしそれが正しいとすれば、$は数字/文字列12の最後の出現を意味するのだろうか?そうだから、それは働くと思う。 –

+0

@VeraGavriel:はい、正しいです。 – anubhava

24

することができますこれを交換してください:

var str = '12-44-12-1564'; 
str = str.replace(/12(?![\s\S]*12)/, 'aa'); 
console.log(str); 

説明:

(?!   # open a negative lookahead (means not followed by) 
    [\s\S]*  # all characters including newlines (space+not space) 
       # zero or more times 
    12 
)    # close the lookahead 

つまりパターンが意味: 12は、文字列の終わりまで、別の12続きません。

+4

+1正規表現のソリューションを使用し、詳細な説明を追加します。 –

+1

(プラス1)検索文字列を末尾($)にする必要がないため –

関連する問題