Tengo esta expresión regular, pero no hace lo que espero:
name.replace(/sor\s*(\d+)\.\s*szék/, function () { return arguments[1] * 1 + 1; }); Mi cadena es 1. sor 1. szék . Y esperaría un regreso 1. sor 2. szék
pero el valor devuelto es: 1. 2 . ¿Por qué?
Obtiene el valor 1. 2 ya que el patrón sor\s*(\d+)\.\s*szék no coincide con el 1. inicial, por lo que permanecerá intacto.
La parte arguments[1] * 1 es 1, y luego le sumas 1, lo que da como resultado 2.
Si desea usar replace, puede usar 3 grupos de captura y usarlos en el reemplazo, pasando los parámetros del grupo a la función de devolución de llamada de replace.
Los dígitos capturados están en el grupo 2, y para evitar la concatenación de 2 cadenas, puede agregar un + antes del grupo 2.
let name = "1. sor 1. szék"; name = name.replace( /(sor\s*)(\d+)(\.\s*szék)/, (m, g1, g2, g3) => `${g1}${+g2+1}${g3}` ); console.log(name);Podría simplificar la expresión regular y reemplazar solo la segunda aparición de dígitos con un valor incrementado.
const string = '1. sor 1. szék.', result = string.replace(/\d+/g, (c => v => c-- ? v : +v + 1)(1)); console.log(result);