这个正则表达式怎么就不起作用呢?

covsno 2010-06-22 03:17:56

var s=document.getElementById("asd").value;
var p=/<div(.*)<\/div>/gim;
var msg=p.exec(s);
alert(RegExp.$1);


源字符串如下:
<div id="Title">
<a href="/Index.aspx" target="_blank"><b>首页</b></a></div>
,这样的字符串上面的正则式无法提取

但是如果不换行
 <div id="Title"><a href="/Index.aspx" target="_blank"><b>首页</b></a></div>
就能提取

我的正则式有上面错误吗?
...全文
253 14 打赏 收藏 转发到动态 举报
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
-过客- 2010-06-22
  • 打赏
  • 举报
回复
try...

<textarea id="source" rows="10" cols="100"></textarea><br />
<input type="Submit" value="处理" onclick="opt();"><br />
<textarea id="result" rows="10" cols="100"></textarea><br />
<script type="text/javascript">
function opt()
{
var str = document.getElementById("source").value;
var reg = /<div[^>]*>[\s\S]*?<\/div>/ig;
var arr = str.match(reg);
for(var i=0;i<arr.length;i++)
{
document.getElementById("result").value += arr[i] + "\n-----------\n";
}
}
</script>
dojotoolkit 2010-06-22
  • 打赏
  • 举报
回复
中括号中的.不会被转义,[.]就直接匹配点号字符。

/<div[^>]*>((.|\n)*)<\/div>/ig
这个匹配你下面的问题。
covsno 2010-06-22
  • 打赏
  • 举报
回复
<div id="Title">
<a href="/Index.aspx" target="_blank"><b>首页</b></a></div> <div id="sub">
<a href="/sub.aspx" target="_blank"><b>sub</b></a></div>


如果源字符串是这样的话,提取每一个div之间的数据 应该怎么搞呢?
covsno 2010-06-22
  • 打赏
  • 举报
回复
应该是 dojotoolkit兄的效率好点
covsno 2010-06-22
  • 打赏
  • 举报
回复
我知道括号中间要构造一个可以包含所有字符的就可以了

root_lee
兄写的为哈不能通过?
dojotoolkit 2010-06-22
  • 打赏
  • 举报
回复
/<div((.|\n)*)<\/div>/gim;
*换成+就行了 怎么回事?
*不是对前面的匹配0或者多次吗?
---------------------------------
*和+号一样效果的,你再试试。用lemon520的应该也可以。
lemon520 2010-06-22
  • 打赏
  • 举报
回复
lz试试我这个:

var p=/<div([\S\s]*)<\/div>/gim;
covsno 2010-06-22
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 dojotoolkit 的回复:]
嗯,点号(.)只能匹配非换行符,改成:
var p=/<div((.|\n)+)<\/div>/gim;
[/Quote]

/<div((.|\n)*)<\/div>/gim;
*换成+就行了 怎么回事?
*不是对前面的匹配0或者多次吗?
covsno 2010-06-22
  • 打赏
  • 举报
回复
var p=/<div(\s*)<\/div>/gim;

或者
var p=/<div((.|\n)*)<\/div>/gim;

都是一个都不能匹配
lemon520 2010-06-22
  • 打赏
  • 举报
回复

var p=/<div([\S\s]*)<\/div>/gim;
root_lee 2010-06-22
  • 打赏
  • 举报
回复
饿,上面的是as中的写法,下面的可用于js
var p=/<div([.\n]*)<\/div>/gsim;
root_lee 2010-06-22
  • 打赏
  • 举报
回复
var p=/<div(.*)<\/div>/gsim;
dojotoolkit 2010-06-22
  • 打赏
  • 举报
回复
嗯,点号(.)只能匹配非换行符,改成:
var p=/<div((.|\n)+)<\/div>/gim;
covsno 2010-06-22
  • 打赏
  • 举报
回复
var p=/<div(/s*)<\/div>/gim;
无论换不换行都无法找到匹配的.

87,907

社区成员

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

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