js正则表达式-非捕获组

(?=X)X,通过零宽度的正lookahead。零宽度正先行断言,仅当子表达式X在此位置的右侧匹配时才继续匹配。例如,\w+(?=\d)表示字母后面跟数字,但不捕获数字(不回溯)

(?!X)X,通过零宽度的负lookahead。零宽度负先行断言。仅当子表达式X不在此位置的右侧匹配时才继续匹配。例如,\w+(?!\d)表示字母后面不跟数字,且不捕获数字。

(?<=X)X,通过零宽度的正lookbehind。零宽度正后发断言。仅当子表达式X在此位置的左侧匹配时才继续匹配。例如,(?<=19)99表示99前面是数字19,但不捕获前面的19。(不回溯)

(?(?>X)X,作为独立的非捕获组(不回溯)

(?=X)与(?>X)的区别在于(?>X)是不回溯的。例如被匹配的字符串为abcm

当表达式为a(?:b|bc)m是可以匹配的,而当表达式是a(?>b|bc)m时是不能匹配的,

因为当后者匹配到b时,由于已经匹配,就跳出了非捕获组,而不再次对组内的字符进行匹配。可以加快速度。

相关推荐