javascript - solo - Use RegExp para hacer coincidir un número entre paréntesis y luego increméntelo
probar expresiones regulares (4)
He estado tratando de encontrar una forma de unir un número en una cadena de Javascript que está rodeado por paréntesis al final de la cadena, y luego incrementarlo.
Digamos que tengo una cadena:
var name = "Item Name (4)";
Necesito un RegExp para que coincida con la (4) parte, y luego tengo que incrementar el 4 y luego ponerlo de nuevo en la cadena.
Esta es la expresión regular que tengo hasta ahora:
/b([0-9]+)$/b
Esta expresión regular no funciona. Además, no sé cómo extraer el número entero recuperado y ponerlo de nuevo en la misma ubicación en la cadena.
Gracias.
El método de reemplazo puede tomar una función como su segundo argumento. Obtiene la coincidencia (incluidas las subcoincidencias) y devuelve la cadena de reemplazo. Otros ya han mencionado que los paréntesis deben ser escapados.
"Item Name (4)".replace(//((/d+)/)/, function(fullMatch, n) {
return "(" + (Number(n) + 1) + ")";
});
Para que este patrón funcione, deberías escapar del paréntesis. Además, / by $ no son necesarios. Así
var s = "Item Name (4)";
var match = //((/d+)/)/.exec( s );
var n = Number(match[1])+1;
alert( s.replace( //(/d+/)/, ''(''+n+'')'' ) );
Solución por david.clarke (probado)
"Item Name (4)".replace(//(([0-9]+)/)/, ''(''+(1+RegExp.$1) + '')'');
Pero creo que es demasiado conciso
UPD : Resultó que RegExp. $ 1 no se puede usar como parte del parámetro de reemplazo, ya que solo funciona en Opera
Solo puedo pensar en una forma de hacerlo en tres pasos: Extraer, incrementar y reemplazar.
// Tested on rhino
var name = "Item Name (4)";
var re = //((/d+)/)/;
match = re.exec(name);
number = parseInt(match[1]) + 1;
name = name.replace(re, "(" + number + ")");
Las partes importantes del patrón:
- Necesitas escapar de los parens para unir parens literales
- También necesita el uso de parens para capturar el número para que pueda extraerlo de la coincidencia.
- / d coincide con un dígito y es más corto y más común que escribir [0-9].
''var name = "Item Name (4)"''.replace(//(([/d]+)/)/, 1 + $1);
(no probado)