2009-11-16 15 views
9

Ottengo il nome di un elemento di input, che è una stringa con un numero (url1). Voglio aumentare il numero di 1 (url2) nel modo più semplice e veloce possibile.Incrementa un numero in una stringa con regex

Il mio modo sarebbe quello di ottenere/restofstring, ++ la partita, quindi mettere insieme il numero con restofstring. C'è un modo migliore?

Aggiornamento:

mio codice finale (fittizio) è diventato:

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, si non è sufficiente cambiare i nomi degli elementi del modulo come quello in IE. Ti imbatterai in problemi: http://stackoverflow.com/questions/1650797/setting-name-of-dom-created-element-fails-in-ie-workaround –

+0

Ok, grazie per l'avviso. Se finisco per dover supportare IE per questo, userò invece YUI Element. –

risposta

32

ne dite:

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

Ci cerchiamo un numero alla fine della stringa, gettarlo ai Number, incrementarlo di 1, e rimetterlo nella stringa. Penso che sia lo stesso algo che hai formulato nella tua domanda.

Riferimento:

+0

Grazie, ho aggiornato la domanda con la soluzione che ho creato con il tuo esempio –

+2

Questa è una bellissima soluzione. – Dwayne

+2

Ecco una versione leggermente modificata che funziona per tutti i numeri in una stringa: '" url5part6 ".replace (/ \ d +/g, function (n) {return ++ n}); // restituisce "url6part7" ' – starbeamrainbowlabs

1

sembra ok. Potresti voler usare un'espressione regolare come ^(.*?)(\d+)$, assicurandoti che il numero che stai afferrando si trovi alla fine della stringa.

7

Semplice. Utilizzare una funzione di sostituzione con le espressioni regolari:

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

imposterà variabile s a: abc100abc

Ma diventa più complicato se si vuole fare in modo di cambiare solo un certo parametro nella URL:

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

imposterà variabile s a: ?foo=10&bar=100

+1

Hm, la domanda non riguardava i parametri get? –

+0

Se hai letto attentamente la domanda, il richiedente non ha specificato cosa esattamente voleva cambiare; nemmeno che il numero sarebbe * alla fine * dell'URL - lo ha appena usato nel suo esempio. Ho pensato che la modifica dei parametri GET sarebbe un probabile caso d'uso. – intgr

+0

"il nome di un elemento di input" = '' –

1

È possibile utilizzare replace e passarlo una funzione da utilizzare per sostituire la sezione trovati:

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