2013-07-23 18 views
12

Pek çok Q & okudum StackOverflow'da olduğu gibi ve hala RegEX'i almakta zorlanıyorum. 12_13_12 dizilim var.javascript dizesinin son geçtiği yeri değiştir

Son 12 olayını aa ile nasıl değiştirebilirim.

Son sonuç 12_13_aa olmalıdır.

Gerçekten nasıl yaptığınız hakkında iyi bir açıklama isterim.

+0

Son numara her zaman 2 rakam içerecek mi? –

+0

@GintasK no .. her zaman 2 rakam içermez ve diğer sayılar –

+0

'12_13_12'.replace (/ 12 ([^ 1] [^ 2]) * $ /,' aa ') // 12 herhangi bir 12 model – TheOne

cevap

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

bunu kullanın String.replace ve sonunda girdi $ sonunu emin olun:

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

DÜZENLEME: Regex bir değişken kullanmak için:

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

tarafından takip edildi, aslında doğru bir örnek aldım, bir sayı –

+1

oldu, sayı/dize 12, son gerçekleşmesi için $ demektir, sağ? bu yüzden işe yaradığını varsayalım. –

+0

@VeraGavriel: Evet, bu doğru. – anubhava

24

yapabilirsiniz Bunu kullanın:

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

açıklamalar: model anlamına gelmektedir

(?!   # 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 

Başka bir deyişle: 12 değil dizginin sonuna kadar bir 12 takip eder.

+4

+1. Arama dizgisinin sonuna kadar girmemesi için –

+1

(artı bir) –

İlgili konular