2009-05-27 17 views
5

Ho qualche javascript che legge alcuni cookie e fa qualche abbinamento. Sto usando i raggruppamenti per catturare parti di un'espressione regolare e usarle in seguito. Tuttavia sto riscontrando un problema con i caratteri Unicode. Se ho un personaggio come \ u25BA ►, quando trovo questo personaggio in un raggruppamento, restituisce la stringa '\ u25BA' al posto del carattere Unicode che sto cercando. Se specifichi il carattere, posso risolvere il problema, ma non riesco a farlo funzionare più in generale. Di seguito funzionerà come voglio che:Corrispondenza Javascript e sostituisci con unicode

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

ma questo non funzionerà:

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

qualche suggerimento?

Altre informazioni: Grazie per le vostre risposte. Lasciami aggiungere un po 'più di background. Penso che il problema è che sto ottenendo le mie partite da un "onclick" su un intervallo. Ho incluso un esempio leggermente più dettagliato di seguito. Se ho una stringa normale con caratteri unicode, quando faccio una corrispondenza, ottengo i caratteri unicode. Tuttavia, quando prendo la stringa dal valore di onclick, ottengo invece le sequenze di escape unicode. Così ho cercato di convertire le sequenze di escape unicode nei caratteri unicode. Spero che abbia un senso. Forse c'è un altro modo per farlo.

Nell'esempio seguente, la barra si comporta come voglio, e 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> 

risposta

1

che dire

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

? Non penso che ti serva lo scappato \u lì.

3

Penso che il tuo \ 1 sia sbagliato. Dovrebbe essere:

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

$ 1 è un riferimento all'indietro nel testo di sostituzione.

Ma non sono completamente sicuro di quello che stai cercando di fare. Tieni presente che puoi utilizzare solo con unicode letterali. Quindi \ u nella regex corrisponde a un letterale \ u0026quot; quindi un valore letterale. E il testo di sostituzione è u.

Problemi correlati