<3333>\s<3333>\s(.*?)<4444>\s<4444>试试。
解决方案 »
- history.back(1);在google器中返回页面没有值,而IE返回是有值的
- 请教 Jquery 在 iframe 中修改父页面内容...
- Html中Form的Action里获取变量 怎么获取?
- ExtJS点击k.getBoundingClientRect();未指明的错误,问题解决
- 求助:用文本框限制只输入中文和英文
- 请问: this.chlidren 在FF下怎么写?
- 菜鸟提问:关于 window.navigator的问题
- javascript函数的参数可以是页面元素吗?
- 怎样能把一个文本框的内容, 放在一个网页中,并保存下来~~~
- 在用htc文件做一些特殊效果时,怎样在HTML页面中使用我在htc文件中定义的方法?
- xmlhttp怎樣在OPEN的時候不顯示警告框
- 大家能帮忙写一个读取这个XML内容里面的item标签的JS吗
[1]
<3333>
ccc
<3333>
aaa
<4444><4444>[2]
<3333>
aaa
<4444>
根本就不匹配
{
var s = aa.value ;
var the = /<3333>\s([^<]*?)<4444>/g
if( the.test(s) )
{
alert( RegExp.$1 )
}
}
<3333>
aaa
<4444>和aaa
<3333><3333>
aaa
<4444><4444>
------------------------
result1:
<3333>
aaaresult2:
<3333>
aaa
<4444>result3:
aaaresult4:
aaa
<4444>
---------------------
我想知道,你要这四个结果吗,还是就你说的那两个,把规则说清楚我的理解是
1.组合式,前两个<3333>和后两个<4444>组合,只要找到配对的,就把它们之间的内容提取
2.搂主的自定义式,第一个<3333>和最后一个<4444>组合,第二个<3333>和倒数第二个<4444>组合还有点不清楚的是,下面这样的例子lz认为该是什么结果呢?
<3333><3333>
aaa
<4444>
<4444>
<4444>
var r=/<3333>([^<>]+)<4444>/ig;
while ((a = r.exec(s)) != null)
document.write(a);
<3333>
ccc
<3333>
aaa
<4444><4444>
转换后可以得到两个结果第一个是
ccc
<3333>
aaa
<4444>第二个是
aaa
<3333>
aaa
<4444>[2]
aaa因为aaa已经作为成功的匹配内容,下次作匹配时它就不再作为匹配对象了
如果用多个正则还可以实现,但好像没有什么意义
(?<=(<3333>))(.+)(?=(<4444>))
<3333>
aaa
<4444>(?<=(<3333>))([^<>]+)(?=(<4444>))
aaa
函数:test
用RegExp.$1取值,可以得到结果是:aaa
<body>
<script>
function matchIt(txt){
var r1=/<3333>\s*(.+)\s*<4444>/ig;
var arr = r1.exec(txt);
for (var i = 0; i < arr.length; i++) {
alert(arr[i]);
}
}
</script>
<form method="post" action="">
请在此处输入中文:<input name="hz">
<input type="submit" value="Submit">
<br />
<textarea cols="85" rows="10" name="txt">
<3333>
ccc
<3333>
aaa
<4444><4444>
</textarea>
<button onclick="matchIt(this.form.txt.value)"> Match </button>
</form>
</body>
</html>不好意思,我错了,调试工具竟然也会骗人
楼主的功能更象DOM规则,建议你用DOM实现。
<HTML>
<HEAD>
<TITLE> New Document </TITLE>
<META NAME="Generator" CONTENT="EditPlus">
<META NAME="Author" CONTENT="">
<META NAME="Keywords" CONTENT="">
<META NAME="Description" CONTENT="">
<SCRIPT LANGUAGE="JavaScript">
<!--
function f()
{alert(document.all.mainInfo.childNodes[0].childNodes[0].childNodes[0].childNodes[1].childNodes[3].childNodes[1].innerText);
document.all.mainInfo.childNodes[0].childNodes[0].childNodes[0].childNodes[1].childNodes[3].childNodes[1].innerText=126532452;}
//-->
</SCRIPT>
</HEAD><BODY>
<h4>aaa</h4>
<div id="mainInfo" class="partCont">
<table>
<tr>
<td class="c">
<div id="userPic">
<a href="/album/Album.jsp?u=200015585"><img src='http://cover.5q.com/album/01/55/85/200015585/mid_200015585.jpg' alt="查看更多照片" /></a><br>
</div>
</td>
<td>
<h4>欧文</h4>
<div id="sendRequest">
<img src="http://img.5q.com/images/ico_offline.gif" align="absmiddle" alt="离线">
</div>
<div id="signature">
</div>
<div class="resource">
资料被浏览<span>101</span>次<br/>
最后登录:<span>2006.07.28</span>
</div>
<br/>
</td>
</tr> </table></div>
<input type=button onclick="f()" value="change"><br>
</BODY>
</HTML>
执行一下我上面的HTML,不知道对你是否有帮助,如楼上上所说,用DOM。
<textarea id="textarea1">
<3333>
ccc
<3333>
aaa
<4444><4444>
</textarea>
<script language=javascript>
var str=document.getElementById("textarea1").value
re=/<3333>/g
var resultArray=new Array();
while(re.test(str))
{
re2=/<3333>([\s\S]*)<4444>/
str=str.replace(/<3333>([\s\S]*)<4444>/,function(a,b){resultArray.push(b);return '<test>'+b+'</test>'})
}
for(var i=0;i<resultArray.length;i++)
{
alert(resultArray[i])
}
</script>
我做了一个正则练习器
javascript的话 /(<3333>)([^\<]*)(<4444>)/gi$2就是 <3333> <4444>之间的内容
var s = s.replace(/<3333>/g,"\x00")
var s = s.replace(/<4444>/g,"\x01")
var r = /\x00[^\x00\x01]*\x01/g
var results = s.match(r);
for(var i=0;i<results.length;i++)
results[i]=results[i].replace(/\x00/g,"<3333>").replace(/\x01/g,"<4444>");
alert(results)
var s = "<3333>1<3333>2<3333>3<3333>aaa<4444>4<4444>5<4444>6<4444>7<3333>8<3333>9<3333>0<3333>bbb<4444>1<4444>2<4444>3<4444>";
var s = s.replace(/<3333>/g,"\x00");
var s = s.replace(/<4444>/g,"\x01");
var result = [];
var r0="\\x00";
var r1="[^\\x00\\x01]*";
var r2="\\x01";
var r = new RegExp(r0+r1+r2,"g")var rs = s.match(r);
for(var n=2;!!rs;n++){
for(var i=0;i<rs.length;i++) result[result.length]=rs[i].replace(/\x00(.*)\x01/,"$1");
var a = new Array(n);
r = new RegExp(r0+a.join(r1+r0)+r1+r2+a.join(r1+r2),"g")
var rs = s.match(r);
}
for(var i=0;i<result.length;i++)
result[i]=result[i].replace(/\x00/g,"<3333>").replace(/\x01/g,"<4444>");
alert(result.join("\n"))
<3333>
ccc
<3333>
aaa1
<4444>
<3333>
aaa2
<4444>
<3333>
<3333>
aaa34
<4444>
aaa3
<4444>
<4444>
平衡组定义。删除先前定义的 name2 组的定义并在 name1 组中存储先前定义的 name2 组和当前组之间的间隔。如果未定义 name2 组,则匹配将回溯。由于删除 name2 的最后一个定义会显示 name2 的先前定义,因此该构造允许将 name2 组的捕获堆栈用作计数器以跟踪嵌套构造(如括号)。在此构造中,name1 是可选的。可以使用单引号替代尖括号,例如 (?'name1-name2')。试试这个
Regex reg=new Regex(@"((?<o>\<3333\>)+[^<>]+(?<-o>\<4444\>)+)*(?(o)(?!))");
Regex reg=new Regex(@"((?<o>\<3333\>[^<>]*)+[^<>]+(?<-o>\<4444\>[^<>]*)+)*(?(o)(?!))");