2013-07-23 15 views
12

Ich habe viele gelesen Q & Wie in StackOverflow und ich habe immer noch eine harte Zeit bekommen, RegEX. Ich habe Zeichenfolge 12_13_12.Javascript ersetzen letztes Auftreten von String

Wie kann ich das letzte Auftreten von 12 durch ersetzen, aa.

Endergebnis sollte 12_13_aa sein.

Ich würde wirklich gerne für eine gute Erklärung darüber, wie Sie es getan haben.

+0

Wird diese letzte Nummer immer 2 Ziffern enthalten? –

+0

@GintasK nein .. es enthält nicht immer 2 Ziffern und so wie das andere Zahlenpaar –

+0

'12_13_12'.replace (/ 12 ([^ 1] [^ 2]) * $ /,' aa ') // 12 gefolgt von einem nicht 12 Muster – TheOne

Antwort

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

verwenden String.replace und stellen Sie sicher, dass Sie Ende der Eingabe haben $ am Ende:

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

EDIT: Um eine Variable in Regex zu verwenden:

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

es war nur ein Beispiel –

+1

tatsächlich, wenn ich es richtig verstanden habe, bedeutet das $ für das letzte Vorkommen der Zahl/String 12, richtig? Weil es so ist, sollte es funktionieren. –

+0

@ VeraGavriel: Ja, das ist richtig. – anubhava

24

Sie können Verwenden Sie dieses ersetzen:

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

Erklärungen:

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

Mit anderen Worten bedeutet das Muster: 12 nicht von einem anderen 12 bis zum Ende der Zeichenfolge folgt.

+4

+1 für die Verwendung einer Regex-Lösung und Hinzufügen einer detaillierten Erklärung. –

+1

(plus eins), damit die Suchzeichenfolge nicht am Ende sein muss ($) –

Verwandte Themen