2009-05-27 78 views
5

我有一些javascript讀取一些cookie,並做一些匹配。我使用分組捕捉正則表達式的一部分,並在以後使用它們。不過,我有一個unicode字符的問題。如果我有一個像\ u25BA}這樣的字符,當我在一個分組中找到這個字符時,它將返回字符串'\ u25BA'而不是我正在尋找的unicode字符。如果我指定角色,我可以解決這個問題,但是我無法讓它更普遍地工作。 下面的工作,因爲我希望它:Javascript匹配,並用unicode替換

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

,但是這是行不通的:

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

有什麼建議?

更多信息: 感謝您的回答。讓我添加更多的背景。我認爲問題在於我從一個跨度的「onclick」獲得我的比賽。我在下面列出了一個稍微更詳細的例子。如果我有一個包含unicode字符的正常字符串,那麼當我進行匹配時,就會得到unicode字符。但是,當我從onclick的值中獲取字符串時,我得到了unicode轉義序列。所以我一直試圖將unicode轉義序列轉換回unicode字符。我希望這是有道理的。也許還有另一種方式來做到這一點。

在下面的示例中,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只能與unicode 文字一起使用。所以正則表達式中的\ u匹配一個字面值\然後一個字面值u。而替換文本中的\ u是你。