在看jQuery源码的时候,看到了对选择器的正则匹配,产生了迷惑,于是仔细查阅了下解除自己的困惑。
迷惑点: z = /^(?:\s*(<[\w\W]+>)[^>]*|#([\w-]*))$/
a = z.exec(‘<div>’) —— ["<div>", "<div>", undefined]
a.index — 0 index 属性声明的是匹配文本的第一个字符的位置
a.input — ‘<div>’ input 属性则存放的是被检索的字符串 string
[xyz] 表示匹配集合中的任意一个元素, [^xyz]反之.
r = /[xyz]/ r.exec(‘xyz’)=[‘x’], r.exec(‘yz’)=[‘y’];
r = /[^xyz]/ r.exec('xyz’)=null, r.exec(‘abc’)=[‘a’].
| 表示选择,或
r = /ab|cd/ r.exec(‘cd’)=[‘cd']
() 括号: 把单独的项目分组成子表达式; 在完整的模式中定义子模式
r = /[a-z]+\d+/ r.exec('asdf12’)=["asdf12"]
r = /[a-z]+(\d+)/ r.exec('asdf12’)=["asdf12", "12"]
z=/(3)/ z.exec(‘3’)=[‘3’, ‘3']
z=/(?:3)/ z.exec(‘3’)=[‘3']
z=/(?:(3))/ z.exec(‘3’)=[‘3’, ‘3']
有时候我们不希望捕获某些分组,只需要在分组内加上 ?: 就可以了,着并不意味着该分组内容不属于正则表达式,只是不会给这个分组加编号了而已