怎么通过这段字符串生成html代码
let str = 'TSUM('zibiao','zongjia',T('t1','t2'))'
<p> <span class="class1">TSUM</span>
<span class="class1">(</span>
<span class="class2">'mingcheng'</span>
<span class="class2">,</span>
<span class="class2">'danjia'</span>
<span class="class2">,</span>
<span class="class1">T</span>
<span class="class1">(</span>
<span class="class2">'t1'</span>
<span class="class2">,</span>
<span class="class2">'t2'</span>
<span class="class1">)</span>
<span class="class1">)</span>
</p>
回答:
首先,你的字符串有问题,如果这些内容是原始内容,你的字符串就需要处理。
比如
let str="TSUM('zibiao','zongjia')"
对此,再用 规则式就可以提取啦。
let RE=/^(.*)\(\s*('.*')\s*,\s*('.*')\s*\)$/;let RtStr='<p>\n';
let RT= RE.exec(str);
if (RT!=null){
RtStr=RtStr + '\t<span class="class1">' + RT[1] + '</span>\n';
RtStr=RtStr + '\t<span class="class1">(</span>\n';
RtStr=RtStr + '\t<span class="class2">' + RT[2] + '</span>\n';
RtStr=RtStr + '\t<span class="class2">,' + RT[3] + '</span>\n';
RtStr=RtStr + '\t<span class="class1">)</span>\n' ;
}
RtStr=RtStr + '</p>\n';
console.log(RtStr)
上面的处理只是对于2个字符串参数,且参数中不能有 ,
。
要处理不定数量的参数,个人建议分成2步,第一步,提取参数集,再用逗号分组。来提取每个参数。
至于输出,则用循环来处理多个参数的部分即可,外围的则相对固定。
回答:
let str2html = (s,a='<span class="class',b='</span>')=>'<p>'+s.replace(/(\w+)(\()/g,a+'1">$1'+b+a+'1">('+b).replace(/('\w+')/g,a+'2">$1'+b).replace(/([),])/g,a+'1">$1'+b)+'</p>';let str = "TSUM('zibiao','zongjia',T('t1','t2'))";
let html = str2html(str);
回答:
我猜你是要把方法和参数做一次分离处理,参数个数不限,下面是个通用方法
// 重新修改了一下,这里前提是方法名和参数名都只包含字母、数字和下划线,不包含其他特殊字符function splitFunction(str) {
const reg2 = /\w+|\(|(?:('|").+?\1)|,|\)/g
let matchArr = str.match(reg2);
matchArr = matchArr.map(s => {
const cls = /(?:('|").+?\1)|,/.test(s) ? 'class2' : 'class1';
return `<span class="${cls}">${s}</span>`
})
return (
`<p>
${matchArr.join('\n')}
</p>
`
)
}
以上是 怎么通过这段字符串生成html代码 的全部内容, 来源链接: utcz.com/p/936772.html