鱼C论坛

 找回密码
 立即注册
查看: 3190|回复: 1

[作品展示] 模板字符串

[复制链接]
发表于 2021-6-1 15:26:31 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

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

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

  1. /**
  2. * 模版字符串
  3. * @param {String} _str  字符串
  4. * @param {Object} that this 指针
  5. * @param {Array} argArray 实参
  6. * @param {String} _opKey 插值关键文本 op
  7. * @param {String} _edKey 插值关键文本 ed
  8. * @returns {{str:String,hit:Array<String>}}
  9. */
  10. function templateStringRender(str,that,argArray,_opKey,_edKey){
  11.     var opKey=_opKey||templateStringRender.templateKeyStr.op,edKey=_edKey||templateStringRender.templateKeyStr.ed;
  12.     if(Object.keys(that).length){
  13.         var temp=[],tempstr="",hit=[];
  14.         var q,p;// q是左
  15.         var headFlag=0,footFlag=0;
  16.         for(p=0,q=0;str[p];++p){
  17.             for(var i=0;i<opKey.length;++i){
  18.                 if(!(headFlag=str[p+i]==opKey[i])){break;}
  19.             }
  20.             
  21.             if(headFlag){ // 检测到头
  22.                 temp.push(str.slice(q,p));
  23.                 q=p+2;
  24.                 while(1){
  25.                     ++p;
  26.                     for(var i=0;i<edKey.length;++i){
  27.                         if(!(footFlag=str[p+i]==edKey[i])){break;}
  28.                     }
  29.                     if(footFlag){
  30.                         tempstr=str.slice(q,p);
  31.                         oldL=temp.join("").length;
  32.                         temp.push((new Function(["tgt"],"return "+tempstr)).apply(that,argArray));
  33.                         hit.push({expression:tempstr,value:temp[temp.length-1]});
  34.                         q=p+1;
  35.                         break;
  36.                     }
  37.                 }
  38.             }
  39.         }
  40.         temp.push(str.slice(q,p));
  41.         return {str:temp.join(""),hit:hit};
  42.     }
  43. }

  44. templateStringRender.templateKeyStr={op:"${",ed:"}"};
复制代码
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2021-6-1 15:30:23 | 显示全部楼层

  1. var str=templateStringRender(tempString,window).str;
复制代码

食用方法
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-4-28 11:47

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表