Você pode fazer a referência anterior como esta em JavaScript:
var str = "123 $test 123";
str = str.replace(/(\$)([a-z]+)/gi, "$2");
Isso substituiria (bastante bobo) "$ test" por "test". Mas imagine que eu gostaria de passar a string resultante de $ 2 para uma função, que retorna outro valor. Tentei fazer isso, mas em vez de obter a string "teste", recebo "$ 2". Existe uma maneira de conseguir isso?
// 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
fonte
fonte
$1
e$2
são nomes de parâmetros escolhidos pelo usuário aqui (escolhidos para imitar os símbolos de referência anterior); o - variando! - o número desses parâmetros corresponde ao número de grupos de captura na regex.Passe uma função como o segundo argumento para
replace
:Esse recurso existe desde o Javascript 1.3, de acordo com mozilla.org .
fonte
Usando ESNext, um substituto de links fictícios, mas apenas para mostrar como funciona:
fonte
Nota: A resposta anterior estava sem algum código. Agora está corrigido + exemplo.
Eu precisava de algo um pouco mais flexível para uma substituição regex para decodificar o Unicode em meus dados JSON de entrada:
fonte
Se você tiver uma quantidade variável de referências anteriores, a contagem de argumentos (e os locais) também são variáveis. O MDN Web Docs descreve a seguinte sintaxe para separar uma função como argumento de substituição:
Por exemplo, pegue estas expressões regulares:
Você não pode usar a variável 'argumentos' aqui porque é do tipo
Arguments
e não do tipo,Array
então não tem umslice()
método.fonte