日期:2014-05-16  浏览次数:20480 次

js对正则的$1转码问题
var g="#哈哈#,这话笑#死人#了"
var re = new RegExp("#([^#].)#", "ig")
var te=g.replace(re, "#<a href=\"?key=$1\">$1</a>#")

如上面代码,将##包含的文字变成有链接的关键字。

因为编码是utf-8的,所以链接中的文字需要转码。即"#<a href=\"?key=$1\">$1</a>#" 中的$1需要转码。

如果我使用 "#<a href=\"?key="+encodeURIComponent("$1")+"\">$1</a>#"),转换的并不是哈哈或者死人两词而是$1

(我想过使用re.test(g),再取出定义变量赋值RegExp.$1,这样不循环的情况下只能正确转换第一个)

请教高手,在不改变 var te=g.replace(re, "#<a href=\"?key=$1\">$1</a>#") 基本格式的情况下,怎么才能对$1进行转码呢?



------解决方案--------------------
我想楼主需要的是这样:
JScript code
var g="#哈哈#,这话笑#死人#了"
var re = new RegExp("#([^#].)#", "ig")
var te=g.replace(re, function($0, $1) {
    return "#<a href=\"?key=" + encodeURIComponent($1) + "\">" + $1 + "</a>#"
})
alert(te);