tab - JavaScript: referencias regexales de cadenas
title html (4)
Puede hacer una referencia inversa como esta en JavaScript:
var str = "123 $test 123";
str = str.replace(/(/$)([a-z]+)/gi, "$2");
Esto sería (bastante tonto) reemplazar "$ test" con "prueba". Pero imagine que me gustaría pasar la cadena resultante de $ 2 en una función, que devuelve otro valor. Intenté hacer esto, pero en vez 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"));
Me gusta esto:
str.replace(regex, function(match, $1, $2, offset, original) { return someFunc($2); })
Pase una función como el segundo argumento para replace
:
str = str.replace(/(/$)([a-z]+)/gi, myReplace);
function myReplace(str, group1, group2) {
return "+" + group2 + "+";
}
Esta capacidad ha existido desde Javascript 1.3, de acuerdo con developer.mozilla.org/en/Core_JavaScript_1.5_Reference/… .
Usando ESNext, es bastante un sustituto de enlaces ficticios, pero solo para mostrar cómo funciona:
let text = ''Visit http://lovecats.com/new-posts/ and https://lovedogs.com/best-dogs NOW !'';
text = text.replace(/(https?:////[^ ]+)/g, (match, link) => {
// remove ending slash if there is one
link = link.replace(///?$/, '''');
return `<a href="${link}" target="_blank">${link.substr(link.lastIndexOf(''/'') +1)}</a>`;
});
document.body.innerHTML = text;
Nota: A la respuesta anterior le faltaba algún código. Ahora está fijo + ejemplo.
Necesitaba algo un poco más flexible para una regex replace para decodificar el Unicode en mis datos entrantes de JSON:
var text = "some string with an encoded ''s'' in it";
text.replace(/&#(/d+);/g, function() {
return String.fromCharCode(arguments[1]);
});
// "some string with an encoded ''s'' in it"