帮忙解释一句JS正则

来源:百度知道 编辑:UC知道 时间:2024/07/03 23:14:29
这是JQUERY源码中的一句,
// A simple way to check for HTML strings or ID strings
// (both of which we optimize for)
var quickExpr = /^[^<]*(<(.|\s)+>)[^>]*$|^#(\w+)$/

帮忙解释一下quickExpr这个正则,因为我不太懂正则,所以希望能解释的详细点

把/^[^<]*(<(.|\s)+>)[^>]*$|^#(\w+)$/分为两部分。
^[^<]*(<(.|\s)+>)[^>]*$与^#(\w+)$,匹配这两部分都OK。

1、先来看看第2部分(因为比较简单)
#(\w+)$ -- 以#开始,后面1到多个字符([a-zA-Z_0-9]),$是行尾。
#24jljjfsl -- 匹配。
#fsaf00fsd -- 匹配。
#2344%$#%# -- 不匹配。

2、再来看看第1部分。
^[^<]*(<(.|\s)+>)[^>]*$

^ -- 匹配行开始。
[^<]* -- 零到多个非'<'的任何字符。
(<(.|\s)+>) -- 以<开始,'.'是任意字符,'\s'空白字符。在<后跟随1到多个任意字符或者空白字符,以>结尾。
[^>]*$ -- 非>的任意字符零到多个,$行尾。

afdsa<html>fdas -- 匹配!其中afdsa匹配[^<]*,<html>匹配(<(.|\s)+>),最后fdas匹配[^>]*$。
<html>aa -- 匹配!其中""(空字符串)匹配[^<]*。它匹配0到多个,空字符串就是0个。
<html> -- 匹配!
fdsa<html<fds>fda>fdsa -- 匹配!其中<html<fds>fda>匹配(<(.|\s)+>)
fdsa<>fdsa -- 不匹配!(<(.|\s)+>)要求在<与>中要有1到多个字符,而<>中没有字符。

我也很讨厌正则表达式 但是谁让别人强大呢