ACTUALIZACIÓN : tenga en cuenta que esta es una solución que debe aplicarse a navegadores más antiguos o plataformas que no son navegadores, y se mantiene activa con fines educativos. Consulte la respuesta de @radicand a continuación para obtener una respuesta más actualizada.
Esta es una cadena de escape Unicode. Primero se escapó la cadena, luego se codificó con Unicode. Para volver a la normalidad:
var x = "http\\u00253A\\u00252F\\u00252Fexample.com";
var r = /\\u([\d\w]{4})/gi;
x = x.replace(r, function (match, grp) {
return String.fromCharCode(parseInt(grp, 16)); } );
console.log(x);
x = unescape(x);
console.log(x);
Para explicar: utilizo una expresión regular para buscar \u0025
. Sin embargo, ya que necesito sólo una parte de esta cadena para mi operación de reemplazo, uso de paréntesis para aislar la parte que voy a reutilización, 0025
. Esta parte aislada se llama grupo.
La gi
parte al final de la expresión indica que debe coincidir con todas las instancias de la cadena, no solo con la primera, y que la coincidencia no debe distinguir entre mayúsculas y minúsculas. Esto puede parecer innecesario dado el ejemplo, pero agrega versatilidad.
Ahora, para convertir de una cadena a la siguiente, necesito ejecutar algunos pasos en cada grupo de cada coincidencia, y no puedo hacerlo simplemente transformando la cadena. Afortunadamente, la operación String.replace puede aceptar una función, que se ejecutará para cada coincidencia. El retorno de esa función reemplazará la coincidencia en la cadena.
Utilizo el segundo parámetro que acepta esta función, que es el grupo que necesito usar, y lo transformo a la secuencia utf-8 equivalente, luego uso la unescape
función incorporada para decodificar la cadena a su forma adecuada.