javascript - JQ源码中这个正则是什么意思?
问题描述
var code = scripts.textContent.replace(/^\s*<!(?:[CDATA[|--)|(?:\]\]|--)>\s*$/g, "");
看不懂这个正则 求dalao解释下 越详细越好 谢谢
我在jq的源代码找到
rcleanScript = /^\s*<!(?:\[CDATA\[|--)|(?:\]\]|--)>\s*$/g;
https://github.com/jquery/jqu...
应该很明显了吧,就是用来清理script内容的。
CDATA是XML标记语言的语法成分,代表‘字符数据’Character Data 也就说明你那代码不是HTML而是XHTML文档。
CDATA标签中字符文本是不作为html被再次转义的。比如' '将不像其他地方那样被转换成空格。通常CDATA里面放一些‘一字不改的数据’,比如源代码,比如Javascript源码。
这是jq他们的测试文件
html text<br/>
<script type="text/javascript">/* <![CDATA[ */
testFoo = "foo"; jQuery('#foo').html('foo');
ok( true, "test.html executed" );
/* ]]> */</script>
<script src="data/testbar.php"></script>
blabla
https://github.com/jquery/jqu...
更新,对这个正则本身的解释
/^\s*<!(?:\[CDATA\[|--)|(?:\]\]|--)>\s*$/g;
以任意数量的
一个空白字符,包括空格、制表符、换页符和换行符
开始和结束空白中间只能是
<!
开头,和>
这个结尾在开头和结尾中间又只能出现
(?:[CDATA[|--)
或(?:]]|--)
这两种字符串:
1) 第一种可以是[CDATA[
或者是--
2) 第二种可以是]]
或者是--
目标结果就是<![CDATA[
]]>
<!--
-->
然后就是replace把符合这样的结构的字符串(注释语句)给干掉。
https://developer.mozilla.org...
\s 匹配一个空白字符,包括空格、制表符、换页符和换行符。
等价于[\f\n\r\t\v\u00a0\u1680\u180e\u2000-\u200a\u2028\u2029\u202f\u205f\u3000\ufeff]
。
例如,/sw*/
匹配"foo bar."中的' bar'。
(?:x)
匹配 'x' 但是不记住匹配项。这种叫作非捕获括号,使得你能够定义为与正则表达式运算符一起使用的子表达式。来看示例表达式/(?:foo){1,2}/
。如果表达式是/foo{1,2}/
,{1,2}将只对 ‘foo’ 的最后一个字符 ’o‘生效。如果使用非捕获括号,则{1,2}会匹配整个 ‘foo’ 单词。
我答题就是这么认真,哈哈
这篇关于javascript - JQ源码中这个正则是什么意思?的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!