javascript - JQ源码中这个正则是什么意思?

查看:87
本文介绍了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;

  1. 以任意数量的一个空白字符,包括空格、制表符、换页符和换行符开始和结束

  2. 空白中间只能是<!开头,和>这个结尾

  3. 在开头和结尾中间又只能出现(?:[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屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆