2009-05-27 69 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是你。