先回答问题题目的(?:)意思这个代表不捕获分组比较(X)和(?:X),前者是捕获分组,后者不捕获,区别在于正则表达式匹配输入字符串之后所获得的匹配的(数)组当中没有(?:X)匹配的部分;比如 var m = "abcabc".match(/(?:a)(b)(c)/) //结果 ["abc", "b", "c"] // m[0] 是/(?:a)(b)(c)/匹配到的整个字符串,这里包括了a // m[1] 是捕获组1,即(b)匹配的子字符串substring or sub sequence // m[2] 是捕获组2,即(c)匹配到的 如果这样 var m = "abcabc".match(/(a)(b)(c)/) //结果 ["abc", "a", "b", "c"] 第一小题应该是这样的正则表达式 /(\w)((?=111)(1))+/ 这里有一个知识点zero-width positive lookahead,零宽断言,正向前瞻(反正我记不住意思是(?=X)匹配某个位置,右边(正向)是X,它不真正匹配捕获子串。看几个匹配的测试例子 /(\w)((?=111)(1))+/.test("1111") // true /(\w)((?=111)(1))+/.test("2222") // false 匹配重复4次以上的字母或数字可以这么写 /(\w)(?=\1{3,})/.test("AAAAAAAA") //true /(\w)(?=\1{3,})/.test("AAAB") //false
"?=n" 匹配任何其后紧接指定字符串 n 的字符串 (?:x) 匹配 'x' 但是不记住匹配项。这种叫作非捕获括号,使得你能够定义为与正则表达式运算符一起使用的子表达式。来看示例表达式 /(?:foo){1,2}/。如果表达式是 /foo{1,2}/,{1,2}将只对 ‘foo’ 的最后一个字符 ’o‘ 生效。如果使用非捕获括号,则{1,2}会匹配整个 ‘foo’ 单词 更多正则表达式
先回答问题题目的
(?:)
意思这个代表不捕获分组
比较
(X)
和(?:X)
,前者是捕获分组,后者不捕获,区别在于正则表达式匹配输入字符串之后所获得的匹配的(数)组当中没有(?:X)
匹配的部分;比如
如果这样
第一小题应该是这样的正则表达式
这里有一个知识点
zero-width positive lookahead
,零宽断言,正向前瞻(反正我记不住意思是
(?=X)
匹配某个位置,右边(正向)是X,它不真正匹配捕获子串。看几个匹配的测试例子
匹配重复4次以上的字母或数字可以这么写