在JavaScript文件里嵌入大量字符串常量是经常遇到的事
有时为了省事
就把一些界面的HTML和CSS直接写在JS文件里
数量少还好多的话就密密麻麻的一坨文字讲究美观的文艺青年们会用大量的字符连接符号甚至加上缩进强制换成好几行例如
复制代码 代码如下:
var html =
<div>
+
<p>Hello</p>
+
<p>World
</p>
+
</div>
;
这还好要是字符串里有不少双引号单引号那就更麻烦了各种转义字符看的眼花缭乱
其实有个不怎么起眼的小技巧就能解决这个问题大家总认为字符串必须在""或里面这点没错但还有一个地方的字符串也能当 非代码语义保存下来那就是一个function的toString把整个函数的代码当字符串输出——其中的注释部分当然也是保留的!
所以我们写个空函数里面就一个/**/注释其中就是我们想要的常量内容toString后加一个正则就可以提取我们想要的!
马上试试
复制代码 代码如下:
var RES_CODE = _TEXT(function(){/*
#include <iostream>
int main()
{
std::cout << "Hello world" << std::endl;
return ;
}
*/});
var RES_POEM = _TEXT(function(){/*
更吹落星如雨
宝马雕车香满路
凤箫声动玉壶光转一夜鱼龙舞
蛾儿雪柳黄金缕
笑语盈盈暗香去
众里寻他千百度
蓦然回首那人却在灯火阑珊处
*/});
var RES_XML = _TEXT(function(){/*
<projectDescription>
<name>Hello</name>
<comment></comment>
<projects>
</projects>
<buildSpec>
<buildCommand>
<name>comadobeflexbuilderprojectflexbuilder</name>
<arguments>
</arguments>
</buildCommand>
<buildCommand>
<name>comadobeflexbuilderprojectapollobuilder</name>
<arguments>
</arguments>
</buildCommand>
</buildSpec>
</projectDescription>
*/});
function _TEXT(wrap) {
return wraptoString()match(//*s([sS]*)s*//)[];
}
alert(RES_CODE);
alert(RES_POEM);
alert(RES_XML);
OK!就是Chrome里把注释每行前面的Tab去掉了如果仅仅是放代码的话问题也不大~ 当然有个前提是字符里不能出现*/
值得注意的是压缩代码的时会过滤注释需要手动排除一部分