var rinlinejQuery = / jQuery\d+="(?:\d+|null)"/g,
html: function( value ) {
if ( value === undefined ) {
return this[0] && this[0].nodeType === 1 ?
this[0].innerHTML.replace(rinlinejQuery, "") :
null;
// See if we can take a shortcut and just use innerHTML
}
是否与jQuery11="11"
等代码相匹配?
为什么html()
函数需要它?
答案 0 :(得分:0)
好的,首先我们有jQuery\d+
,它只是'jQuery'后跟一个或多个数字(\d
与[01-9]
相同)。
然后我们在这里只有文字的="
,所以我们匹配任何有'jQuery'的东西,然后是至少一个数字,然后'=''。
接下来,(...|...)
构造是一个Or,因此它匹配垂直条|
之前的表达式或它后面的表达式。在这种情况下,这些表达式是\d+
和null
,因此我们的查询匹配任何由'jQuery'组成的字符串,至少一个数字,'=“',然后至少有一个数字,或字符串'null'。后跟一个"
字面值。
作为表达式本身的一部分,唯一剩下的就是在左括号之后找到的?:
。 通常情况下,正则表达式中括号中的任何内容都会被保存,以便您可以在替换字符串中使用$n
引用它,其中n
是一个数字,指的是哪个匹配您指的是。在这种情况下启动括号的?:
可以防止这种情况发生,以便括号可以用于对Or的选项进行分组而不会浪费时间或记忆来记住匹配的值
最后,正则表达式用正斜杠/
括起来,而且这个正斜率有g
开关,表示全局搜索。
我们所拥有的是'jQuery',一个或多个数字,'='',一个或多个数字或'null','“'。
要回答你的第二个问题,是的,这个模式会匹配那个字符串。
我担心我不知道为什么jQuery的html函数需要从this[0].innerHTML
删除那个特定的字符串(这是replace
函数正在做的事情),但是基于它的注释看起来像他们使用字符串来测试innerHTML
是否有效且功能正常(它不是在所有浏览器上)?