以下哪些正则表达式满足regexp.test('abc') === true?
A
/^abc$/
B
/...(?=.)/
C
/[ab]{2}[^defgh]/
D
/[defgh]*/
正确答案:ACD
补充一下B的先行断言:
(?=pattern) 正向先行断言
代表字符串中的一个位置,紧接该位置之后的字符序列能够匹配pattern。
例如对”a regular expression”这个字符串,要想匹配regular中的re,但不能匹配expression中的re,可以用”re(?=gular)”,该表达式限定了re右边的位置,这个位置之后是gular,但并不消耗gular这些字符,将表达式改为”re(?=gular).”,将会匹配reg,元字符.匹配了g,括号这一砣匹配了e和g之间的位置。
.匹配除“\n”和"\r"之外的任何单个字符。要匹配包括“\n”和"\r"在内的任何字符,请使用像“[\s\S]”的模式。\S和\s的意义不同,\S是匹配任意不是空白符的字符
所以说在这里/...(?=.)/匹配的是:
前面任意三个字符,但是后面必须跟一个任意字符(除了\n和\r)。
但是题目给出来的字符串只有三个字符,该正则表达式至少要四个字符。
A.这算是完全匹配了,^a表示以a开头,c$表示以c结尾,中间再夹个b
B."."表示匹配除换行符的任意字符,"x(?=y)"匹配'x'仅仅当'x'后面跟着'y'.这种叫做先行断言。所以这里可以理解为:
1.当没有换行符时,只要字符前面是三的倍数/.../,并且后面跟有字符/(?=.)/,就可匹配,如1234,abcdefg,234wewrwwr(下划线处为匹配项)
2.有换行符时,每一行要重新匹配,即字符长度独立,从0开始(下划线处为匹配项)
121sfs12
12sd
323fd
C.[ab]表示a或b {2}表示长度为2 [^defgh]表示非defgh的字符,所以可匹配的有,aac,bbc,abc,abcd等,注意这里匹配长度为3
D."*"表示0或者多个字符,这里可匹配空,或者括号内任意字符