日期:2014-05-16  浏览次数:20470 次

一个jquery里面的正则表达式没太看明白
rquickExpr = /^(?:\s*(<[\w\W]+>)[^>]*|#([\w-]*))$/,
在jquery里面有这个正则,这里面的(<[\w\W]+>>)不太理解,是指什么意思
或者请大侠讲解一些这个表达式整个是什么意思,拜谢啦

------解决方案--------------------
/w代表[A-Za-z0-9_]
/W代表[^A-Za-z0-9_]
[/w/W]就是匹配任何字符
<[\w\W]+>就是匹配一个html的开头标签吧
至于整个表达式的意思, 好像不是去匹配任何字符, 只是一个顺序肯定环视效果,表达式具体意途没看出来

------解决方案--------------------
^(?:\s*(<[\w\W]+>)[^>]*
------解决方案--------------------
#([\w-]*))$
整体来说:
^和$对应字符串的开始和结尾
(?:exp)意味着不为该捕获组命名
中间的
------解决方案--------------------
为条件判断,满足前者就不进行后者的判断
exp 的内容:
\s*(<[\w\W]+>)[^>]*
------解决方案--------------------
#([\w-]*)
前一个判断条件:\s*(<[\w\W]+>)[^>]*
\s* 匹配任意个空白字符
(<[\w\W]+>) 匹配以<开始,以>结尾. \w匹配单词字符, \W匹配非单词字符, [\w\W]+即匹配1个或一个以上的单词字符或非单词字符。(其实,意同.+)该捕获组被自动编号1
[^>]* 匹配任意个不是>的字符
后一个判断条件:#([\w-]*)
#是普通字符
([\w-]*) 匹配任意个单词字符或-号。 该捕获组被自动编号1

这个正则是在尝试匹配 <xxx> 和#id 的字符, 就是jquery的选择器, $("<xxx>")或者$("#id")
以下是jquery的原文, 我加了点备注:
		// Handle HTML strings
// $(obj)的用法, 首先判断是不是字符串
if ( typeof selector === "string" ) {
// 如果传进来的是html字符, 跳过正则判断
if ( selector.charAt(0) === "<" && selector.charAt( selector.length - 1 ) === ">" && selector.length >= 3 ) {
// Assume that strings that start and end with <> are HTML and skip the regex check
// 跳过判断, match被设为数组, 把传进来的html字符添加进去
match = [ null, selector, null ];

} else {
// 进行正则判断, 匹配参数是html字符或者是#id字符
match = rquickExpr.exec( selector );
}
//上面不管哪种情况判断成真, match[1]的值都会为传进来的参数, 前者是作为了一个数组, 后者是正则匹配之后的捕获组值

// Match html or make sure no context is specified for #id
// 如果参数是html字符或者是#id字符, 进行以下处理
if ( match && (match[1] 
------解决方案--------------------
 !context) ) {
// 剩下的逻辑
}
// 其他的逻辑
}

------解决方案--------------------
不太准确,不能说这个正则在匹配<xxx>, 应该说是这种情况:$(html, props)<