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)后面一个匹配不到,请问我要怎样修改才能同时提取到两个字符串能,求赐教 展开
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)后面一个匹配不到,请问我要怎样修改才能同时提取到两个字符串能,求赐教 展开
4个回答
展开全部
首先,如果你想多个匹配必须加上模式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足以。
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
看看输出的结果
展开全部
楼上说的都对,这里做成一个例子:
<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>
<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>
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
<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>
增加全局判断即可。
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>
增加全局判断即可。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
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]);
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]);
本回答被提问者采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询