首先,如果你想多个匹配必须加上模式g。即
var regExp=new RegExp(/[a-zA-Z]{2}\d+\s*(\([a-zA-Z]\d\))?/g) //最后在“/”后加个g
其次,match返回的是一个数组。分别用下标表示所返回的东西。
//js中不加序号则输出数组中的数据,用“,”隔开个数据
alert(str.match(regExp)) //输出 WO2012107238 (A1),DE102011011048 (A1)
alert(str.match(regExp)[0]) //输出 WO2012107238 (A1)
alert(str.match(regExp)[1]) //输出 DE102011011048 (A1)
这里你直接返回数组,然后用一个数组变量接值就好。
更要说的就是exec返回的也是数组,[0]返回全匹配结果 [1],[2],[3],……之后的就是在正则中括号内的正则所匹配在子串。exec很强大,但是match足以。
楼上说的都对,这里做成一个例子:
增加全局判断即可。
str=" Also published as: WO2012107238 (A1) DE102011011048 (A1)"
var regExp=new RegExp(/[a-zA-Z]{2}\d+\s*(\([a-zA-Z]\d\))?/g) // g表示全局匹配
//alert(regExp.exec(str));
alert(str.match(regExp)[0]);
alert(str.match(regExp)[1]);