2009-11-16 32 views
9

Obtengo el nombre de un elemento de entrada, que es una cadena con un número (url1). Quiero incrementar el número en 1 (url2) de la manera más fácil y rápida posible.Incrementar un número en una cadena con regex

Mi manera sería obtener \d/restofstring, ++ la coincidencia, luego juntar el número con restofstring. ¿Hay una mejor manera?

Actualización:

Mi (ficticio) código final se convirtió en:

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, se no se puede simplemente cambiar los nombres de elementos de formulario como ese en IE. Te encontrarás con problemas: http://stackoverflow.com/questions/1650797/setting-name-of-dom-created-element-fails-in-ie-workaround –

+0

Ok, gracias por el aviso. Si termino necesitando soporte para IE para esto, usaré el elemento YUI en su lugar. –

Respuesta

32

¿Qué tal:

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

Hay que buscar un número al final de la cadena, lo echó a Number, incrementarlo en 1, y colocarlo de nuevo en la cadena. Creo que ese es el mismo problema que escribiste en tu pregunta, incluso.

Referencia:

+0

Gracias, actualicé la pregunta con la solución que hice con su ejemplo –

+2

Esta es una hermosa solución. – Dwayne

+2

Aquí hay una versión ligeramente modificada que funciona para todos los números en una cadena: '" url5part6 ".replace (/ \ d +/g, función (n) {return ++ n}); // devuelve "url6part7" ' – starbeamrainbowlabs

1

se ve bien. Es posible que desee utilizar una expresión regular como ^(.*?)(\d+)$, asegurándose de que el número que está agarrando esté al final de la cadena.

7

Simple. Utilice una función de sustitución con expresiones regulares:

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

se define la variable s a: abc100abc

Pero se vuelve más complicado si desea asegurarse de que sólo cambia un determinado parámetro en la URL:

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

se define la variable s a: ?foo=10&bar=100

+1

Hm, ¿la pregunta no era sobre obtener parámetros? –

+0

Si leyó la pregunta con cuidado, el solicitante no especificó exactamente qué quería cambiar; ni siquiera que el número sea * al final * de la URL, simplemente lo usó en su ejemplo. Pensé que cambiar los parámetros GET sería un caso de uso probable. – intgr

+0

"el nombre de un elemento de entrada" = '' –

1

Puede utilizar replace y pasarlo una función a utilizar para reemplazar la sección encontrados:

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