javascript正则表达式提取字符串,我想提取这种字符串WO2012107238 (A1)

str="Alsopublishedas:WO2012107238(A1)DE102011011048(A1)"varregExp=newRegExp(/[a-zA-Z]... str=" Also published as: WO2012107238 (A1) DE102011011048 (A1)"
var regExp=new RegExp(/[a-zA-Z]{2}\d+\s*(\([a-zA-Z]\d\))?/)
alert(regExp.exec(str));
return str.match(regExp)[0];
我用alert提示匹配到的内容,我的正则式只能匹配到WO2012107238 (A1)后面一个匹配不到,请问我要怎样修改才能同时提取到两个字符串能,求赐教
展开
 我来答
不二进制
2012-11-15 · TA获得超过749个赞
知道小有建树答主
回答量:441
采纳率:50%
帮助的人:321万
展开全部
首先,如果你想多个匹配必须加上模式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足以。
更多追问追答
追问
match解决了我的问题但是exec还是有问题,这两者的匹配方法是不是不太一样
追答
match是全部匹配的,exec是一个一个匹配的,每次只匹配一次。你可以输出多个,如
alert(regExp.exec(str)); //WO2012107238 (A1),(A1)

alert(regExp.exec(str)); //DE102011011048 (A1),(A1)

alert(regExp.exec(str)); //unll

alert(regExp.exec(str)); //null
看看输出的结果
seesea2517
2012-11-15 · TA获得超过1480个赞
知道小有建树答主
回答量:512
采纳率:100%
帮助的人:554万
展开全部
楼上说的都对,这里做成一个例子:

<html>
<head>
<script type="text/javascript">
function xxx()
{
str=" Also published as: WO2012107238 (A1) DE102011011048 (A1)"
var regExp=new RegExp(/[a-zA-Z]{2}\d+\s*(\([a-zA-Z]\d\))?/g) // g表示全局匹配

return str.match(regExp);
}

var ar = xxx();
for (var i = 0; ar != null && i < ar.length; ++i)
{
alert("第" + i + "个匹配:" + ar[i]);
}
</script>
</head>
</html>
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
SouTek
2012-11-15 · TA获得超过2187个赞
知道小有建树答主
回答量:613
采纳率:0%
帮助的人:784万
展开全部
<script type="text/javascript">
str=" Also published as: WO2012107238 (A1) DE102011011048 (A1)"
var regExp=new RegExp(/[a-zA-Z]{2}\d+\s*\([a-zA-Z]\d\)/g)

for each (var i in str.match(regExp)){
document.write(i+"<br>");
}
</script>

增加全局判断即可。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
帐号已注销
推荐于2016-10-19 · TA获得超过4630个赞
知道大有可为答主
回答量:1345
采纳率:50%
帮助的人:1635万
展开全部
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]);
本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(2)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式