非捕获性分组,通常由一对括号加上 ?: 加上子表达式组成,非捕获性分组不会创建反向引用,就好像没有括号一样。如下:

var color = "#808080"; var output = color.replace(/#(?:\d+)/,"$1"+"~~"); console.log(RegExp.$1);// "" console.log(output);// $1~~ 

以上,(?:\d+) 表示一个非捕获性分组, 由于分组不捕获任何内容,所以 RegExp.$1 就指向了空字符串.

同时,由于 $1 的反向引用不存在, 因此它被当成了普通的字符串。