2009-05-27 13 views
5

Tengo un javascript que lee algunas cookies y hace algunas coincidencias. Estoy usando agrupaciones para capturar partes de una expresión regular y usarlas más adelante. Sin embargo, tengo un problema con los caracteres Unicode. Si tengo un personaje como \ u25BA ►, cuando encuentro este personaje en una agrupación, devuelve la cadena '\ u25BA' en lugar del carácter unicode que estoy buscando. Si especifico el carácter, puedo solucionar el problema, pero no puedo lograr que funcione de manera más general. El siguiente trabajo como yo quiero que:Javascript coincida y reemplace con unicode

var matches=theOnclick.match(/.*\(event, ?"([^"]*)", ?"([^"]*)".*\)/); 
var expand=matches[1].replace(/\\u25BA/, '\u25BA'); 

pero esto no va a funcionar:

var expand=matches[1].replace(/\\u([0-9A-Z])/, '\u\1'); 

alguna sugerencia?

Más información: Gracias por su respuesta. Déjame agregar un poco más de fondo. Creo que el problema es que estoy obteniendo mis coincidencias de un "clic" en un lapso. He incluido un ejemplo un poco más detallado a continuación. Si tengo una cadena normal con caracteres Unicode, cuando hago una coincidencia, obtengo los caracteres Unicode. Sin embargo, cuando tomo la cadena del valor del onclick, en su lugar obtengo las secuencias de escape Unicode. Así que he intentado convertir las secuencias de escape Unicode nuevamente en los caracteres Unicode. Espero que tenga sentido. Tal vez hay otra manera de hacerlo.

En el siguiente ejemplo, la barra se comporta como yo quiero y foo no.

<html> 
<body> 
<span id='foo' onclick='expandCollapse(event, "►", "▼");'>foo</span> 
<script type='text/javascript'> 
var foo= document.getElementById('foo').onclick+''; 
alert(foo); 
var foomatches=foo.match(/.*\(event, ?"([^"]*)", ?"([^"]*)".*\)/); 
alert(foomatches); 
var bar='expandCollapse(event, "►", "▼");' 
var barmatches=bar.match(/.*\(event, ?"([^"]*)", ?"([^"]*)".*\)/); 
alert(barmatches); 
</script> 
</body> 
</html> 

Respuesta

1

¿qué pasa con

var expand=matches[1].replace(/\\u([0-9A-Z])/, '\1'); 

? No creo que necesite el escapado \u allí.

3

Creo que su \ 1 es incorrecto. Debe ser como:

"\u2603".replace(/(.)/, "$1")) 

$ 1 es una retrospectiva en el texto de sustitución.

Pero no estoy del todo seguro de lo que estás tratando de hacer. Tenga en cuenta que solo se puede usar con los literales de unicode. Entonces, \ u en la expresión regular coincide con un literal \ y luego con un literal u. Y el \ u en el texto de reemplazo es un u.

Cuestiones relacionadas