js正则问题

花木兰1闪21A 2013-09-25 01:02:59
var str ="<a href='www.dsf.jsp'>123</a><a href='www.dsf.jsp'>456</a>";
现在用js正则取到123,和456应该怎么取到?
...全文
149 17 打赏 收藏 转发到动态 举报
写回复
用AI写文章
17 条回复
切换为时间正序
请发表友善的回复…
发表回复
花木兰1闪21A 2013-09-25
  • 打赏
  • 举报
回复
引用 9 楼 veryhunger 的回复:
var result;
var reg = /<a.*?>(.+?)<\/a>/g;
var str ="<a href='www.dsf.jsp'>123</a><a href='www.dsf.jsp'>456</a>";
while ((result = reg.exec(str)) != null)  {
  alert(result[1]);
 }
之前只知道exec是返回匹配的第一个,原来还能while 这个也很不错
thy442030800 2013-09-25
  • 打赏
  • 举报
回复
引用 15 楼 fzfei2 的回复:
[quote=引用 14 楼 thy442030800 的回复:] 哥们,可以解释一下吗? [^>]+(?=<\/a>)
[^>]+ : 多个不等">"的字符 (?=<\/a>):以</a>结尾[/quote] 谢谢了。 我擦,把反义这茬儿给忘了。。
fzfei2 2013-09-25
  • 打赏
  • 举报
回复
引用 14 楼 thy442030800 的回复:
哥们,可以解释一下吗? [^>]+(?=<\/a>)
[^>]+ : 多个不等">"的字符 (?=<\/a>):以</a>结尾
thy442030800 2013-09-25
  • 打赏
  • 举报
回复
引用 5 楼 fzfei2 的回复:
[quote=引用 4 楼 tlfu_12344 的回复:] [quote=引用 1 楼 fzfei2 的回复:]

var str ="<a href='www.dsf.jsp'>123</a><a href='www.dsf.jsp'>456</a>";
alert( str.match(/\d+(?=<\/a>)/ig) ) ;
//或者
alert( str.match(/\d+/g) ) ;
那数字只是个代表,不能用\\d,可以是任意的东西[/quote] var str ="<a href='www.dsf.jsp'>123</a><a href='www.dsf.jsp'>456</a>"; alert( str.match(/[^>]+(?=<\/a>)/ig) ) ;[/quote] 哥们,可以解释一下吗? [^>]+(?=<\/a>) 我在正则工具中测试不通过,但是js中测试通过。望不吝赐教。。。 To 楼主: 我的这个:(?<=\B>).*?(?=<\/a),刚才我在正则工具中测试通过就贴上来了,你别用,原来js中不支持 ?<=(零宽度正回顾后发断言), 真是太无语了。。。 用fzfei2的不就可以取到你想要的了吗? 如果是用match,返回的会是用逗号分隔的值,你再分割一下吧 如果是用exec,设定分组可以这样用:

            var reg = "regtext...";
            var str ="<a href='www.dsf.jsp'>123</a><a href='www.dsf.jsp'>456</a>";
            //alert(str.match(reg))
            var matches=reg.exec(str);
            //alert(matches.length);
            var index=matches.length;
            while(index > 0)
            {
                alert(matches[matches.length-index]);
                index--;
            }
如果不设定分组,那需要设定/g(global模式),只有重复exec判断reg.exec(str)!=null了。。
  • 打赏
  • 举报
回复
引用 12 楼 tlfu_12344 的回复:
[quote=引用 11 楼 thy442030800 的回复:] [quote=引用 8 楼 tlfu_12344 的回复:] [quote=引用 5 楼 fzfei2 的回复:] [quote=引用 4 楼 tlfu_12344 的回复:] [quote=引用 1 楼 fzfei2 的回复:]

var str ="<a href='www.dsf.jsp'>123</a><a href='www.dsf.jsp'>456</a>";
alert( str.match(/\d+(?=<\/a>)/ig) ) ;
//或者
alert( str.match(/\d+/g) ) ;
那数字只是个代表,不能用\\d,可以是任意的东西[/quote] var str ="<a href='www.dsf.jsp'>123</a><a href='www.dsf.jsp'>456</a>"; alert( str.match(/[^>]+(?=<\/a>)/ig) ) ;[/quote] 受教了,这个非捕获向后匹配用的好。我之前是用/<a.*?>(.+?)<\/a>/g;在java中我们可以用m.group(1)来得到,js中也有RegExg.$1,悲惧的是只匹配一个还行,当多个是,后面的$1会覆盖之前的,也就是说$1永远是最后那个!java中匹配后可以while中,js中没有嘛?没有的庆感觉不太合理啊!![/quote] exec只会返回一个值, 设定分组,可以返回一个array[/quote] 我用的是match他返回是arr <a href='www.dsf.jsp'>123</a>,<a href='www.dsf.jsp'>456</a> 也就是说我那括号用的没用,我想只取到小括号中的内容[/quote] 有一个还行
var str ="<a href='www.dsf.jsp'>123</a>";
alert(str.match(/<a.*?>(.+?)<\/a>/));
花木兰1闪21A 2013-09-25
  • 打赏
  • 举报
回复
引用 11 楼 thy442030800 的回复:
[quote=引用 8 楼 tlfu_12344 的回复:] [quote=引用 5 楼 fzfei2 的回复:] [quote=引用 4 楼 tlfu_12344 的回复:] [quote=引用 1 楼 fzfei2 的回复:]

var str ="<a href='www.dsf.jsp'>123</a><a href='www.dsf.jsp'>456</a>";
alert( str.match(/\d+(?=<\/a>)/ig) ) ;
//或者
alert( str.match(/\d+/g) ) ;
那数字只是个代表,不能用\\d,可以是任意的东西[/quote] var str ="<a href='www.dsf.jsp'>123</a><a href='www.dsf.jsp'>456</a>"; alert( str.match(/[^>]+(?=<\/a>)/ig) ) ;[/quote] 受教了,这个非捕获向后匹配用的好。我之前是用/<a.*?>(.+?)<\/a>/g;在java中我们可以用m.group(1)来得到,js中也有RegExg.$1,悲惧的是只匹配一个还行,当多个是,后面的$1会覆盖之前的,也就是说$1永远是最后那个!java中匹配后可以while中,js中没有嘛?没有的庆感觉不太合理啊!![/quote] exec只会返回一个值, 设定分组,可以返回一个array[/quote] 我用的是match他返回是arr <a href='www.dsf.jsp'>123</a>,<a href='www.dsf.jsp'>456</a> 也就是说我那括号用的没用,我想只取到小括号中的内容
thy442030800 2013-09-25
  • 打赏
  • 举报
回复
引用 8 楼 tlfu_12344 的回复:
[quote=引用 5 楼 fzfei2 的回复:] [quote=引用 4 楼 tlfu_12344 的回复:] [quote=引用 1 楼 fzfei2 的回复:]

var str ="<a href='www.dsf.jsp'>123</a><a href='www.dsf.jsp'>456</a>";
alert( str.match(/\d+(?=<\/a>)/ig) ) ;
//或者
alert( str.match(/\d+/g) ) ;
那数字只是个代表,不能用\\d,可以是任意的东西[/quote] var str ="<a href='www.dsf.jsp'>123</a><a href='www.dsf.jsp'>456</a>"; alert( str.match(/[^>]+(?=<\/a>)/ig) ) ;[/quote] 受教了,这个非捕获向后匹配用的好。我之前是用/<a.*?>(.+?)<\/a>/g;在java中我们可以用m.group(1)来得到,js中也有RegExg.$1,悲惧的是只匹配一个还行,当多个是,后面的$1会覆盖之前的,也就是说$1永远是最后那个!java中匹配后可以while中,js中没有嘛?没有的庆感觉不太合理啊!![/quote] exec只会返回一个值, 设定分组,可以返回一个array
fzfei2 2013-09-25
  • 打赏
  • 举报
回复
如果有多个分组,while 循环 就按 #9 方法写 或者 str.replace(/<a.*?>(.+?)<\/a>/g,function(s,s1){ alert(s1) })
  • 打赏
  • 举报
回复
var result;
var reg = /<a.*?>(.+?)<\/a>/g;
var str ="<a href='www.dsf.jsp'>123</a><a href='www.dsf.jsp'>456</a>";
while ((result = reg.exec(str)) != null)  {
  alert(result[1]);
 }
花木兰1闪21A 2013-09-25
  • 打赏
  • 举报
回复
引用 5 楼 fzfei2 的回复:
[quote=引用 4 楼 tlfu_12344 的回复:] [quote=引用 1 楼 fzfei2 的回复:]

var str ="<a href='www.dsf.jsp'>123</a><a href='www.dsf.jsp'>456</a>";
alert( str.match(/\d+(?=<\/a>)/ig) ) ;
//或者
alert( str.match(/\d+/g) ) ;
那数字只是个代表,不能用\\d,可以是任意的东西[/quote] var str ="<a href='www.dsf.jsp'>123</a><a href='www.dsf.jsp'>456</a>"; alert( str.match(/[^>]+(?=<\/a>)/ig) ) ;[/quote] 受教了,这个非捕获向后匹配用的好。我之前是用/<a.*?>(.+?)<\/a>/g;在java中我们可以用m.group(1)来得到,js中也有RegExg.$1,悲惧的是只匹配一个还行,当多个是,后面的$1会覆盖之前的,也就是说$1永远是最后那个!java中匹配后可以while中,js中没有嘛?没有的庆感觉不太合理啊!!
thy442030800 2013-09-25
  • 打赏
  • 举报
回复
我了个擦擦 原来 \ / 两个符号在一起显示,就会像个V一样 我刚才还在纳闷呢,正则里有大写V? 我靠!!
thy442030800 2013-09-25
  • 打赏
  • 举报
回复
引用 5 楼 fzfei2 的回复:
[quote=引用 4 楼 tlfu_12344 的回复:] [quote=引用 1 楼 fzfei2 的回复:]

var str ="<a href='www.dsf.jsp'>123</a><a href='www.dsf.jsp'>456</a>";
alert( str.match(/\d+(?=<\/a>)/ig) ) ;
//或者
alert( str.match(/\d+/g) ) ;
那数字只是个代表,不能用\\d,可以是任意的东西[/quote] var str ="<a href='www.dsf.jsp'>123</a><a href='www.dsf.jsp'>456</a>"; alert( str.match(/[^>]+(?=<\/a>)/ig) ) ;[/quote] 可能是我太菜,有点没看懂,前面这个是怎么回事? /[^>] 取 ^或者> ? 虽然匹配出来了,但是不懂。。。 我用了两个零宽度断言,这样就OK: (?<=\B>).*?(?=<\/a)
fzfei2 2013-09-25
  • 打赏
  • 举报
回复
引用 4 楼 tlfu_12344 的回复:
[quote=引用 1 楼 fzfei2 的回复:]

var str ="<a href='www.dsf.jsp'>123</a><a href='www.dsf.jsp'>456</a>";
alert( str.match(/\d+(?=<\/a>)/ig) ) ;
//或者
alert( str.match(/\d+/g) ) ;
那数字只是个代表,不能用\\d,可以是任意的东西[/quote] var str ="<a href='www.dsf.jsp'>123</a><a href='www.dsf.jsp'>456</a>"; alert( str.match(/[^>]+(?=<\/a>)/ig) ) ;
花木兰1闪21A 2013-09-25
  • 打赏
  • 举报
回复
引用 1 楼 fzfei2 的回复:

var str ="<a href='www.dsf.jsp'>123</a><a href='www.dsf.jsp'>456</a>";
alert( str.match(/\d+(?=<\/a>)/ig) ) ;
//或者
alert( str.match(/\d+/g) ) ;
那数字只是个代表,不能用\\d,可以是任意的东西
枫醉秋 2013-09-25
  • 打赏
  • 举报
回复
引用 1 楼 fzfei2 的回复:

var str ="<a href='www.dsf.jsp'>123</a><a href='www.dsf.jsp'>456</a>";
alert( str.match(/\d+(?=<\/a>)/ig) ) ;
//或者
alert( str.match(/\d+/g) ) ;
1楼正解
  • 打赏
  • 举报
回复
var str ="<a href='www.dsf.jsp'>123</a><a href='www.dsf.jsp'>456</a>";
var arr = str.match(/\d+/g);
alert(arr[0] + ' ' + arr[1]);
fzfei2 2013-09-25
  • 打赏
  • 举报
回复

var str ="<a href='www.dsf.jsp'>123</a><a href='www.dsf.jsp'>456</a>";
alert( str.match(/\d+(?=<\/a>)/ig) ) ;
//或者
alert( str.match(/\d+/g) ) ;

87,907

社区成员

发帖
与我相关
我的任务
社区描述
Web 开发 JavaScript
社区管理员
  • JavaScript
  • 无·法
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧