使用正则表达式的字符串替换数组是否可以使用eval
来执行并从我需要通过此方法完成的函数返回值:
var message = $('#message').html();
var searchstring = [
/<span style="color: rgb((.*), (.*), (.*));">(.*)<\/span>/gi,
// other regex
];
var replacestring = [
eval('RGBtoHex($1, $2, $3)'),
// other regex
];
for(i = 0; i < searchstring.length; i++)
{
message = message.replace(searchstring[i], replacestring[i]);
}
$('.message-box').val(message);
我尝试将RGB转换为十六进制值,因此它应该更改为:rgb(255, 255, 255)
到#FFFFFF
。但是,当我这样做时,它在Firebug中说:$1 is not defined
,其位置为:eval('RGBtoHex($1, $2, $3)'),
。
在使用eval()
进行字符串替换时,如何执行.replace()
函数将rgb返回到十六进制值?
除了评估部分外,一切都很完美。
答案 0 :(得分:6)
它不能那样工作。
当您致电eval
时,您eval
原始字符串'RGBtoHex($1, $2, $3)'
。
您需要pass a function to replace
:
message.replace(
/rgb\((\d+), (\d+), (\d+)\)/gi,
function(str, r, g, b) { return RGBtoHEX(r, g, b); }
);
答案 1 :(得分:0)
在创建替换阵列期间执行您的eval。当然,您可以通过简单地传递接受参数而不是替代字符串的函数来在替换时调用代码...例如
"1234".replace(/\d/g,function(x){return parseInt(x)+1})
返回"2345"
作为结果