2009-05-27 16 views
5

Mam niektóre javascript, który czyta niektóre pliki cookie i niektóre dopasowania. Korzystam z grupowania, aby przechwycić części wyrażenia regularnego i użyć ich później. Mam jednak problem ze znakami Unicode. Jeśli mam znak taki jak \ u25BA ►, po znalezieniu tego znaku w grupie, zwraca ciąg znaków "\ u25BA" zamiast szukanego znaku Unicode. Jeśli podam ten znak, mogę rozwiązać problem, ale nie mogę go uruchomić, aby działał bardziej ogólnie. Następujące będzie działać jak chcę go:JavaScript mecz i zamień na unicode

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

ale to nie będzie działać:

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

jakieś sugestie?

Więcej informacji: Dziękuję za odpowiedzi. Pozwól mi dodać trochę więcej tła. Myślę, że problemem jest to, że otrzymuję moje mecze od "onclick" na rozpiętości. Poniżej zamieściłem nieco bardziej szczegółowy przykład. Jeśli mam normalny ciąg znaków ze znakami Unicode, gdy robię dopasowanie, otrzymuję znaki Unicode. Jednakże, gdy pobieram ciąg od wartości onclick, otrzymuję zamiast tego sekwencje specjalne Unicode. Tak więc próbowałem przekształcić sekwencje specjalne Unicode z powrotem w znaki Unicode. Mam nadzieję, że ma to sens. Być może jest inny sposób na zrobienie tego.

W poniższym przykładzie pasek zachowuje się tak, jak chcę, a foo nie.

<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> 

Odpowiedz

1

co

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

? Nie sądzę, że potrzebujesz tam uciekłego \u.

3

Myślę, że Twój \ 1 jest zły. Powinno to wyglądać następująco:

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

1 dolar jest odniesieniem w tekście zastępczym.

Ale nie jestem do końca pewien, co próbujesz zrobić. Należy pamiętać, że \ u można używać tylko z kodami Unicode literałów. Więc \ u w regex pasuje do literału \, a następnie literalnego. A \ u w tekście zastępującym jest u.