javascript - 这个正则表达式为什么总是只能替换掉一个字符串??
本文介绍了javascript - 这个正则表达式为什么总是只能替换掉一个字符串??的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
问 题
我是想把双大括号里的包括字符串替换成真正的值,但是总是只能替换掉一个,不知道为什么?
var tpl = '/cube_xinbao_dial_result/{{report_type}}/{{query}}';
var data = {report_type:1, query: '2323'}
function render(tpl, data){
var re = /{{([^}]+)?}}/g;
var match = '';
while(match = re.exec(tpl)){
tpl = tpl.replace(match[0],data[match[1]]);
}
return tpl;
}
console.log(render(tpl,data));
解决方案
String.replace 也支持正则表达式当作参数哦,给你改写了一下
var tpl = '/cube_xinbao_dial_result/{{report_type}}/{{query}}';
var data = {report_type:1, query: '2323'}
function render(tpl, data){
var re = /{{([^}]+)?}}/g;
return tpl.replace(re, function($0, $1, $2){
if( $1 in data ){
return data[$1];
}else{
return "[DATA."+ $1.toUpperCase() + "]"; //如果没有,提示标签错误
}
});
}
console.log(render(tpl,data));
/*
/cube_xinbao_dial_result/1/2323
*/
console.log(render(tpl,{query:1234}));
/*
/cube_xinbao_dial_result/[DATA.REPORT_TYPE]/1234
*/
如果执意要使用你原来的方式,需要取消掉全局参数g
var tpl = '/cube_xinbao_dial_result/{{report_type}}/{{query}}';
var data = {report_type:1, query: '2323'}
function render(tpl, data){
var re = /{{([^}]+)?}}/; //不要全局匹配就可以
var match = '';
while(match = re.exec(tpl)){
tpl = tpl.replace(match[0],data[match[1]]);
}
return tpl;
}
console.log(render(tpl,data));
/*
/cube_xinbao_dial_result/1/2323
*/
这篇关于javascript - 这个正则表达式为什么总是只能替换掉一个字符串??的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文