- (?=)会作为匹配校验,但不会出现在匹配结果字符串里面
- (?:)会作为匹配校验,并出现在匹配结果字符里面,它跟(…)不同的地方在于,不作为子匹配返回。
E.g 1:
var data = 'windows NT 50';
console.log(data.match(/windows (?=\d+)/)); // ["windows "]
console.log(data.match(/windows (?:\d+)/)); // ["windows 98"]
console.log(data.match(/windows (\d+)/)); // ["windows NT", "50"]
E.g 2:
var patt = /Win(?:dows )?([^do]{2})\s?(\d+\.\d+)?/i;
for (var i = 0; i < textList.length; i++) {
console.log("---------orginal text= "+textList[i]);
console.log("%j", textList[i].match(patt));
}
Result:
———orginal text= Windows 95
%j Array [ “Windows 95”, “95”, undefined ]
———orginal text= Win98
%j Array [ “Win98”, “98”, undefined ]
———orginal text= Windows XP
%j Array [ “Windows XP”, “XP”, undefined ]
———orginal text= Windows NT 5.1
%j Array [ “Windows NT 5.1”, “NT”, “5.1” ]
———orginal text= Win 9x 4.90
%j Array [ “Win 9”, ” 9”, undefined ]