// A simple way to check for HTML strings or ID strings
// (both of which we optimize for)
quickExpr = /^(?:[^<]*(<[\w\W]+>)[^>]*$|#([\w\-]+)$)/
根據jquery的注釋,其是匹配HTML字符串和ID選擇器
一開始看這段正則表達式的時候,怎麼匹配非<的0個或者多個,又匹配<,這樣到底是匹配<還是不匹配呢?而且html標簽,不是應該就直接匹配<嗎?
首先(?:pattern)匹配 pattern 但不獲取匹配結果,也就是說這是一個非獲取匹配,不進行存儲供以後使用。而且其會匹配所有非括號裡的內容。
下面給個例子來說明
代碼如下:
var quickExpr = /^(?:[^<]*(<[\w\W]+>)[^>]*$|#([\w\-]+)$)/;
sss="jytjt<dd1></1>fefef"
match=quickExpr.exec(sss);
alert(match);
結果是jytjt<dd1></1>fefef=,<dd1></1>
可以看到exec返回的是一個數組,而且第二個字符串就是?:匹配掉<>外非<和非>的字符
在jquery中獲得結果的方法也是match[1]。所以這樣即使你給jquery的選擇器輸入了多余的html標簽,它也可以篩選出正確的html標簽來。同時這裡的?:還會篩選掉#,所以會得到只有id名,沒有#號的id。
所以這段jquery正則表達式的意思就是,篩選html標簽或者id選擇符