(?=pattern) 正向先行断言 代表字符串中的一个位置,紧接该位置之后的字符序列能够匹配pattern。

发布时间 2023-11-15 22:07:03作者: 龙陌

以下哪些正则表达式满足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或者多个字符,这里可匹配空,或者括号内任意字符