2009-11-16 16 views
9

Ich bekomme den Namen eines Eingabeelements, das eine Zeichenfolge mit einer Nummer ist (). Ich möchte die Nummer mit 1 (url2) auf die einfachste und schnellste Weise erhöhen.Inkrementieren Sie eine Zahl in einer Zeichenfolge mit Regex

Mein Weg wäre \d/restofstring, ++ das Spiel zu bekommen, dann Nummer mit restofstring zusammen. Gibt es einen besseren Weg?

Update:

Mein letzter (Dummy) Code wurde:

var liNew = document.createElement('li'); 
liNew.innerHTML = liOld.innerHTML; 
var els = Y.Dom.getChildrenBy(liNew, function(el) { 
    return el.name.match(/\d+$/); 
} // YUI method where the function is a test 
for (var i = 0, el; el = els[i]; i++) { 
    el.name = el.name.replace(/\d+$/, function(n) { return ++n }); 
} 
list.appendChild(liNew); 
+0

Er, Sie kann nicht einfach Formelementnamen wie in IE ändern. Sie werden in Probleme stoßen: http://stackoverflow.com/questions/1650797/setting-name-of-dom-created-element-fails-in-ar-around –

+0

Ok, danke für die Köpfe hoch. Wenn ich IE dafür unterstützen muss, verwende ich stattdessen YUI-Element. –

Antwort

32

Wie wäre:

'url1'.replace(/\d+$/, function(n){ return ++n }); // "url2" 
'url54'.replace(/\d+$/, function(n){ return ++n }); // "url55" 

Es suchen wir nach einer Nummer am Ende der Schnur, um es zu Number gegossen, erhöht um 1, und es zurück in die Zeichenfolge platzieren. Ich denke, das ist der gleiche Algo, den Sie selbst in Ihrer Frage formuliert haben.

Referenz:

+0

Danke, ich habe die Frage mit der Lösung aktualisiert, die ich mit Ihrem Beispiel gemacht habe –

+2

Dies ist eine schöne Lösung. – Dwayne

+2

Hier ist eine leicht modifizierte Version, die für alle Zahlen in einem String funktioniert: '" url5part6 ".Ersetzen (/ \ d +/g, Funktion (n) {return ++ n}); // liefert "url6part7" ' – starbeamrainbowlabs

1

OK Sieht aus. Vielleicht möchten Sie eine Regex wie ^(.*?)(\d+)$ verwenden, stellen Sie sicher, dass die Nummer, die Sie greifen, am Ende der Zeichenfolge ist.

7

Einfach. Verwenden Sie eine Ersetzungsfunktion mit regulären Ausdrücken:

s = 'abc99abc'; 
s = s.replace(/\d+/, function(val) { return parseInt(val)+1; }); 

Variable s eingestellt werden an: abc100abc

Aber es wird noch komplizierter, wenn Sie Sie einen bestimmten Parameter in der URL ändern, um sicherzustellen, möchten:

s = '?foo=10&bar=99'; 
s = s.replace(/[&?]bar=\d+/, function(attr) { 
    return attr.replace(/\d+/, function(val) { return parseInt(val)+1; }); 
}); 

wird Setvariable s zu: ?foo=10&bar=100

+1

Hm, ging es nicht darum, Parameter zu bekommen? –

+0

Wenn Sie die Frage sorgfältig gelesen haben, hat der Fragesteller nicht spezifiziert, was genau er ändern wollte; Nicht mal dass die Nummer * am Ende * der URL wäre - er hat es nur in seinem Beispiel benutzt. Ich dachte, dass das Ändern von GET-Parametern ein wahrscheinlicher Anwendungsfall wäre. – intgr

+0

"Der Name eines Eingabeelements" = '' –

1

eine Regex nehmen Sie replace verwenden können und es eine Funktion übergeben, verwenden, um den angepassten Abschnitt zu ersetzen:

str.replace(/\d+/, function(number) { return parseInt(number, 10) + 1; }); 
Verwandte Themen