我有一些javascript读取一些cookie,并进行一些匹配。我正在使用分组来捕获正则表达式的一部分并在以后使用它们。我遇到了unicode角色的问题。如果我有一个像\u25BA►这样的字符,当我在分组中找到这个字符时,它会返回字符串'\ u25BA'而不是我正在寻找的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>
答案 0 :(得分:3)
我认为你的\ 1错了。应该是这样的:
"\u2603".replace(/(.)/, "$1"))
$ 1是替换文本中的反向引用。
但我不完全确定你要做什么。请记住\ u只能与unicode 文字一起使用。所以正则表达式中的\ u匹配文字\然后是文字u。替换文本中的\ u是你。
答案 1 :(得分:1)
怎么样
var expand=matches[1].replace(/\\u([0-9A-Z])/, '\1');
?我认为您不需要转义\u
。