javascript - 这个正则表达式为什么总是只能替换掉一个字符串??

查看:94
本文介绍了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屋!

查看全文
相关文章
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆