如何在Javascript中将正则表达式替换为数组元素

3
我遇到了以下问题。我想要替换数组字符串对应元素的名称标签。可能有点难以解释,所以我将向您展示代码:
var test = [];
test['some'] = 'Some test';
var content = '{some}';
document.write(content.replace(/{([^}]+)}/g, test[RegExp.$1])); // It doesn't work
document.write(test[RegExp.$1]); // It work

现在我的问题是:为什么替换标记没有获取到test ['some']中保存的字符串(变成了未定义)?在第二次尝试获取正常字符串'Some test'时。如何修复它以便在转换时正确转换标记?
2个回答

1
你需要转义 {},因为它们都是特殊的正则表达式符号:
使用这个正则表达式:
/\{([^}]+)\}/g

编辑:您需要使用自定义函数处理程序的String#replace

repl = content.replace(/\{([^}]+)\}/g, function($0, $1) {return test[$1];});

谢谢回复,但不幸的是它仍然无法正常工作。我尝试了两种方法:document.write(content.replace(/{([^}]+)}/g, test[RegExp.$1])); 和 document.write(content.replace(/{([^}]+)}/g, test["$1"])); - Jake

1

请查看此 演示 jsFiddle

JavaScript

var test = [];
test['some'] = 'Some test';
var content = '{some}';
document.write(content.replace(new RegExp('/{([^}]+)}/','g'), test['some'])); 
document.write(test['some']);

结果

{some}Some test

我在这里检查了您的regexp,它完美地工作了。希望这能帮到您!


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接