Darth_EF 发表于 2021-6-1 15:26:31

模板字符串

本帖最后由 Darth_EF 于 2021-6-1 15:43 编辑

ie中无法使用模板字符串`string=${string}`,于是我就写了这个。挺拉跨的其实。

/**
* 模版字符串
* @param {String} _str字符串
* @param {Object} that this 指针
* @param {Array} argArray 实参
* @param {String} _opKey 插值关键文本 op
* @param {String} _edKey 插值关键文本 ed
* @returns {{str:String,hit:Array<String>}}
*/
function templateStringRender(str,that,argArray,_opKey,_edKey){
    var opKey=_opKey||templateStringRender.templateKeyStr.op,edKey=_edKey||templateStringRender.templateKeyStr.ed;
    if(Object.keys(that).length){
      var temp=[],tempstr="",hit=[];
      var q,p;// q是左
      var headFlag=0,footFlag=0;
      for(p=0,q=0;str;++p){
            for(var i=0;i<opKey.length;++i){
                if(!(headFlag=str==opKey)){break;}
            }
            
            if(headFlag){ // 检测到头
                temp.push(str.slice(q,p));
                q=p+2;
                while(1){
                  ++p;
                  for(var i=0;i<edKey.length;++i){
                        if(!(footFlag=str==edKey)){break;}
                  }
                  if(footFlag){
                        tempstr=str.slice(q,p);
                        oldL=temp.join("").length;
                        temp.push((new Function(["tgt"],"return "+tempstr)).apply(that,argArray));
                        hit.push({expression:tempstr,value:temp});
                        q=p+1;
                        break;
                  }
                }
            }
      }
      temp.push(str.slice(q,p));
      return {str:temp.join(""),hit:hit};
    }
}

templateStringRender.templateKeyStr={op:"${",ed:"}"};

Darth_EF 发表于 2021-6-1 15:30:23


var str=templateStringRender(tempString,window).str;

食用方法
页: [1]
查看完整版本: 模板字符串