Puede hacer una referencia inversa como esta en JavaScript:
var str = "123 $test 123";
str = str.replace(/(\$)([a-z]+)/gi, "$2");
Esto (bastante tonto) reemplazaría "$ test" por "test". Pero imagina que me gustaría pasar la cadena resultante de $ 2 a una función, que devuelve otro valor. Intenté hacer esto, pero en lugar de obtener la cadena "prueba", obtengo "$ 2". ¿Hay una manera de lograr esto?
// Instead of getting "$2" passed into somefunc, I want "test"
// (i.e. the result of the regex)
str = str.replace(/(\$)([a-z]+)/gi, somefunc("$2"));
javascript
regex
backreference
quano
fuente
fuente
$1
y$2
son los nombres de los parámetros elegidos por el usuario aquí (elegidos para imitar los símbolos de referencia inversa); el - ¡variando! - el número de estos parámetros corresponde al número de grupos de captura en la expresión regular.Pase una función como segundo argumento a
replace
:Esta capacidad ha existido desde Javascript 1.3, según mozilla.org .
fuente
Usando ESNext, todo un sustituto de enlaces ficticios, pero solo para mostrar cómo funciona:
fuente
Nota: En la respuesta anterior faltaba algún código. Ahora es fijo + ejemplo.
Necesitaba algo un poco más flexible para un reemplazo de expresiones regulares para decodificar el Unicode en mis datos JSON entrantes:
fuente
Si tuviera una cantidad variable de referencias inversas, entonces el recuento de argumentos (y los lugares) también son variables. Los documentos web de MDN describen la siguiente sintaxis para separar una función como argumento de reemplazo:
Por ejemplo, tome estas expresiones regulares:
No puede usar la variable 'argumentos' aquí porque es de tipo
Arguments
y no de tipo,Array
por lo que no tiene unslice()
método.fuente