2010-12-28 12 views
0

Ich habe ein Formular auf einer Website mit einer Reihe von Eingabeelementen. Das name-Attribut für diese Elemente hat die Form "property-0". Der Benutzer benötigt jedoch möglicherweise mehrere Feldgruppen, genau wie die aktuelle, also klon ich das Feld mit jQuery clone(), aber dann muss ich die Zahl am Ende erhöhen. Die Zahl könnte über 10 liegen, sodass ich nicht einfach das letzte Zeichen auswählen kann. DieseErsetzen "Name" Attribut mit Javascript Regex

ist, was ich versuche:

name.replace(/([0-9]+)$/, String(Number('$1')+1)); 

aber es gibt mir nur property-NaN. Wer weiß, was ich falsch mache?

Antwort

4

Sie können eine Funktion in als zweites Argument zu .replace(), wie dies passieren:

name.replace(/([0-9]+)$/,function(a, m) { return +m+1; }); 

You can test it out here, fühlen Sie sich frei +m mit parseInt(m, 10) zu ersetzen, wenn Sie mor wohl dabei sind.

+0

Vielen Dank! Ich wusste nie, dass du dort eine Funktion verwenden kannst. – Nick

+0

@Nick - willkommen :) –

0

Sie können $1 nicht so verwenden. Das funktioniert nur, wenn Sie es direkt in die Ersetzungszeichenfolge einfügen oder eine Rückruffunktion verwenden.

3

Sie konvertieren die Zeichenfolge '$ 1' in eine Zahl (ist es nicht), so dass es NaN (Not a Number) wird. Sie müssen eine Rückruffunktion stattdessen an .replace() übergeben:

name.replace(/([0-9]+)$/, function(str, p1) { 
    return Number(p1) + 1; 
});