2009-05-27 10 views
5

私はいくつかのクッキーを読み、いくつかのマッチングを行ういくつかのjavascriptを持っています。私は、正規表現の一部をキャッチして後で使用するためにグループ化を使用しています。私はユニコード文字に問題があります。もし私が\ u25BAのような文字を持っているなら、私はグループ化でこの文字を見つけると、私が探しているユニコード文字の代わりに文字列 '\ u25BA'を返します。私がキャラクターを指定すると、私は問題を解決することができますが、それをより一般的に機能させることはできません。私はそれがしたいよう 次のように動作します:JavaScriptが一致してユニコードに置換されます

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

が、これは動作しません。

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

任意の提案を?

詳細情報: お返事ありがとうございます。少し背景を追加してみましょう。私は問題は、私はスパンで "onclick"から私の試合を取得しているということだと思う。私は以下のやや詳細な例を含んでいます。私はそれにユニコード文字を持つ通常の文字列を持っている場合、私は一致を行うと、私はユニコード文字を取得します。しかし、私はonclickの値から文字列を取得するとき、私は代わりにユニコードのエスケープシーケンスを取得します。だから、私はユニコードのエスケープシーケンスをユニコード文字に変換しようとしています。私はそれが理にかなったことを願うおそらくそれを行う別の方法があります。

以下の例では、barは必要に応じて動作し、fooは動作しません。

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

答えて

1

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

は?私はあなたが脱出する必要があるとは思わない\uそこに。

3

あなたの\ 1が間違っていると思います。それは次のようにする必要があります。

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

$ 1は、置換テキストのバックリファレンスです。

しかし、あなたがしようとしていることは完全にはわかりません。ユニコードリテラルでのみ使用できることに注意してください。したがって、正規表現の\ uは、リテラル\とリテラルuを照合します。そして置換テキストの\ uはuです。

関連する問題