本篇学习笔记内容源于《Secrets of the JavaScript Ninja》
在正则表达式中,圆括号()有这双重功能,第一:为一些操作归类分组(与程序表达式中的用法差不多),第二:用于捕获信息。在一般的应用中,这两种功能并不冲突,但当正则表达式中的圆括号有些多时,就会造成不必要的捕获操作,从而影响真正需要捕获的信息操作。
例如:var temp = /((xirang-)+)blog/;
上面的正则表达式主要描述为:在blog前,允许出现一次或者多次“xirang-“。当然,为了捕获blog前面的所有信息,我们在(xirang)+的外部又加了一对圆括号用于实现捕获操作。此时我们可以看到,内部的圆括号用于将xirang-归类分组,以便其能够以整体的形式运用+操作符,但恰恰是这对圆括号影响了我们本身想要的单个捕获的操作逻辑(只想要一次捕获,即blog前的信息)。
如何取消内部圆括号的捕获功能,使其只具有聚类分组功能呢,请见下面的操作(在圆括号一开始运用?:操作符)
var temp = /((?:xirang-)+)blog/;
上面的表达式,只将外面的圆括号用于捕获操作,内部的圆括号只具有聚类分组功能,这与我们第一开始的想法一致了。