求一超难的正则替换方法! 本帖最后由 regex2013 于 2011-03-15 16:34:15 编辑 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 不好意思,楼主没能完成,却感觉有点难,我只分析到这一步能把中间的规则的标签一个挨一个的变成[a]xxx[/a],但是如果内部多层嵌套的,或者距离比较远的,顶部和底部的就无法起作用了!我实在有点糊涂了!我先把我写的代码发出来,看谁能继续研究研究!谢了! <html><title>test</title><head><script type="text/javascript">window.onload=function(){//alert(document.getElementsByTagName('body')[0].getElementsByTagName('p')[0].innerHTML);var tt=document.getElementsByTagName('body')[0].getElementsByTagName('p')[0].innerHTML;var reg=/<([^>]+)>(.*?)<(\/[^>]+)>/igm;var str=tt.replace(reg,'[$1]$2[$3]'); alert(str);}</script></head><body><P style="background-color:aqua;padding:30px;"><TABLE> <TBODY> <TR> <TD> <P id="img1" onclick="alert(this.parentElement.id)"><A href="http://image.img.com///2011/03/141740919.jpg" target=_blank><IMG class=imgborder border=1 alt=2011XUFULTZ src="templetfile/232958916.jpg" width=270 height=180></A></P> <P id="img1text" style="TEXT-ALIGN: center"><SPAN style="COLOR: #0000ff"><B>2011XUFULTZ</B></SPAN></P></TD> <TD> <P id="img2"><A href="http://image.img.com///2011/03/141804409.jpg" target=_blank><IMG class=imgborder border=1 alt=2012FT src="templetfile/233028672.jpg" width=270 height=180></A></P> <P id="img2text" style="TEXT-ALIGN: center"><SPAN style="COLOR: #0000ff"><B>2012</B></SPAN></P> </TD> </TR> </TBODY></TABLE></P><P><TABLE class=table_news border=0 cellSpacing=0 cellPadding=0 align=center> <THEAD> <TR> <TH>ch</TH> <TH>2011LTZ</TH> <TH>2012itanium</TH></TR></THEAD> <TBODY> <TR> <TD colSpan=3>外观尺寸及容量</TD></TR> <TR> <TD>长mm</TD> <TD>4597</TD> <TD>4534</TD></TR> <TR> <TD>宽mm</TD> <TD>1796</TD> <TD>1824</TD></TR> <TR> <TD>高mm</TD> <TD>1476</TD> <TD>1468</TD></TR> </TBODY></TABLE></P></body></html> 感谢falizixun2,也请各位朋友继续关注! <html><title>test</title><head><script type="text/javascript"> window.onload=function(){ //alert(document.getElementsByTagName('body')[0].getElementsByTagName('p')[0].innerHTML); var tt = window.tt = document.getElementsByTagName('body')[0]; var content = tt.innerHTML; var table = '', table_replace = '', tables = null; var index = 0, prefix = '', after = ''; // 第一次找出所有p标签中的table var reg1 = /\s*<p[^>]*>\s*(<table[^>]*>(?:\s*<(?!\/?table[^>]*>)[^>]+>[^<]*)+<\/table>)\s*<\/p>\s*/igm; // 第二次将<>变成[] var reg2 = /<([^>]+)>/igm; while ((tables = reg1.exec(content)) != null) { table = tables[1]; table_replace = table.replace(reg2, '[$1]'); // 查找字符串的位置, 将正确的内容替换回去 index = content.indexOf(table); prefix = content.substring(0, index); afterfix = content.substring(index + table.length); content = prefix + table_replace + afterfix; } tt. innerHTML = content; }</script></head><body><P style="background-color:aqua;padding:30px;"><TABLE> <TBODY> <TR> <TD> <P id="img1" onclick="alert(this.parentElement.id)"><A href="http://image.img.com///2011/03/141740919.jpg" target=_blank><IMG class=imgborder border=1 alt=2011XUFULTZ src="templetfile/232958916.jpg" width=270 height=180></A></P> <P id="img1text" style="TEXT-ALIGN: center"><SPAN style="COLOR: #0000ff"><B>2011XUFULTZ</B></SPAN></P></TD> <TD> <P id="img2"><A href="http://image.img.com///2011/03/141804409.jpg" target=_blank><IMG class=imgborder border=1 alt=2012FT src="templetfile/233028672.jpg" width=270 height=180></A></P> <P id="img2text" style="TEXT-ALIGN: center"><SPAN style="COLOR: #0000ff"><B>2012</B></SPAN></P> </TD> </TR> </TBODY></TABLE></P><P><TABLE class=table_news border=0 cellSpacing=0 cellPadding=0 align=center> <THEAD> <TR> <TH>ch</TH> <TH>2011LTZ</TH> <TH>2012itanium</TH></TR></THEAD> <TBODY> <TR> <TD colSpan=3>外观尺寸及容量</TD></TR> <TR> <TD>长mm</TD> <TD>4597</TD> <TD>4534</TD></TR> <TR> <TD>宽mm</TD> <TD>1796</TD> <TD>1824</TD></TR> <TR> <TD>高mm</TD> <TD>1476</TD> <TD>1468</TD></TR> </TBODY></TABLE></P></body></html> \n 换 <br/> .... ++++++ 真的很强悍! 楼主这个帖我不要分了,全给hnxxwyq吧! str.replace(/<(?!\/?p\b)([^>]+)>/gi, "[$1]")CODE:<textarea id="txt"><P style="background-color:aqua;padding:30px;"><TABLE> <TBODY> <TR> <TD> <P id="img1" onclick="alert(this.parentElement.id)"><A href="http://image.img.com///2011/03/141740919.jpg" target=_blank><IMG class=imgborder border=1 alt=2011XUFULTZ src="templetfile/232958916.jpg" width=270 height=180></A></P> <P id="img1text" style="TEXT-ALIGN: center"><SPAN style="COLOR: #0000ff"><B>2011XUFULTZ</B></SPAN></P></TD> <TD> <P id="img2"><A href="http://image.img.com///2011/03/141804409.jpg" target=_blank><IMG class=imgborder border=1 alt=2012FT src="templetfile/233028672.jpg" width=270 height=180></A></P> <P id="img2text" style="TEXT-ALIGN: center"><SPAN style="COLOR: #0000ff"><B>2012</B></SPAN></P> </TD> </TR> </TBODY></TABLE></P><P><TABLE class=table_news border=0 cellSpacing=0 cellPadding=0 align=center> <THEAD> <TR> <TH>ch</TH> <TH>2011LTZ</TH> <TH>2012itanium</TH></TR></THEAD> <TBODY> <TR> <TD colSpan=3>外观尺寸及容量</TD></TR> <TR> <TD>长mm</TD> <TD>4597</TD> <TD>4534</TD></TR> <TR> <TD>宽mm</TD> <TD>1796</TD> <TD>1824</TD></TR> <TR> <TD>高mm</TD> <TD>1476</TD> <TD>1468</TD></TR> </TBODY></TABLE></P></textarea><script>alert(txt.value.replace(/<(?!\/?p\b)([^>]+)>/gi, "[$1]"))</script> 你这个是什么意思<(?!\/?p\b)([^>]+)> ?这个没看太懂,能详解一下吗?还有既然是多行,为什么你在正则末尾不加/igm,不加m呢?特请教,谢谢! 学习了:<html><head> <title></title> <meta http-equiv="Content-Type" content="text/html;charset=GBK"></head><body><P> <TABLE class=table_news border=0 cellSpacing=0 cellPadding=0 align=center> <THEAD> <TR> <TH>ch</TH> <TH>2011LTZ</TH> <TH>2012itanium</TH></TR></THEAD> <TBODY> <TR> <TD colSpan=3>外观尺寸及容量</TD></TR> <TR> <TD>长mm</TD> <TD>4597</TD> <TD>4534</TD></TR> <TR> <TD>宽mm</TD> <TD>1796</TD> <TD>1824</TD></TR> <TR> <TD>高mm</TD> <TD>1476</TD> <TD>1468</TD></TR> </TBODY></TABLE></P><script type="text/javascript"> window.onload = function() { var pelems = document.getElementsByTagName("p"); for(i=0;i<pelems.length;i++) { var tab = pelems[i].innerHTML; var reg = /<([^<]+)>/g; pelems[i].innerHTML = tab.replace(reg,'[$1]').replace(/\r\n/g,'<br>'); } } </script></body></html> 你的方法应该行,但如何把[TABLE class=table_news border=0 cellSpacing=0 cellPadding=0 align=center] [THEAD] [TR] [TH]ch[/TH] [TH]2011LTZ[/TH] [TH]2012itanium[/TH][/TR][/THEAD] [TBODY] [TR] [TD colSpan=3]外观尺寸及容量[/TD][/TR] [TR] [TD]长mm[/TD] [TD]4597[/TD] [TD]4534[/TD][/TR] [TR] [TD]宽mm[/TD] [TD]1796[/TD] [TD]1824[/TD][/TR] [TR] [TD]高mm[/TD] [TD]1476[/TD] [TD]1468[/TD][/TR][/TBODY][/TABLE]再变回原样呢? <html><title>test</title><head><script type="text/javascript">朋友你的代码实现了把<p>下的table代码都[]形式,我希望该再能实现把<p>[table]...[/table]</p>包替换回来</script></head><body><p>111111</p><p>222</p><P style="background-color:aqua;padding:30px;"><TABLE> <TBODY> <TR> <TD> <P id="img1" onclick="alert(this.parentElement.id)"><A href="http://image.img.com///2011/03/141740919.jpg" target=_blank><IMG class=imgborder border=1 alt=2011XUFULTZ src="templetfile/232958916.jpg" width=270 height=180></A></P> <P id="img1text" style="TEXT-ALIGN: center"><SPAN style="COLOR: #0000ff"><B>2011XUFULTZ</B></SPAN></P></TD> <TD> <P id="img2"><A href="http://image.img.com///2011/03/141804409.jpg" target=_blank><IMG class=imgborder border=1 alt=2012FT src="templetfile/233028672.jpg" width=270 height=180></A></P> <P id="img2text" style="TEXT-ALIGN: center"><SPAN style="COLOR: #0000ff"><B>2012</B></SPAN></P> </TD> </TR> </TBODY></TABLE></P><p>33333</p><P><TABLE class=table_news border=0 cellSpacing=0 cellPadding=0 align=center> <THEAD> <TR> <TH>ch</TH> <TH>2011LTZ</TH> <TH>2012itanium</TH></TR></THEAD> <TBODY> <TR> <TD colSpan=3>外观尺寸及容量</TD></TR> <TR> <TD>长mm</TD> <TD>4597</TD> <TD>4534</TD></TR> <TR> <TD>宽mm</TD> <TD>1796</TD> <TD>1824</TD></TR> <TR> <TD>高mm</TD> <TD>1476</TD> <TD>1468</TD></TR> </TBODY></TABLE></P></body></html> <(?!\/?p\b)([^>]+)>我个人的理解是:字面意思为:<符号后为,不是0个或1个单词边界的p标签,之后为1个或多个不是>字符的任何符号并以>结尾意思就是匹配除了<p>或</p>以外的任何<...>,</...>这样的元素标签。不知道我的理解有没有错!欢迎指正! 如果你只是为了替换后处理过以后再替换回来,建议你直接用 [[[table]]]代替[table], 以便减小误差,这样的话你就可以直接<script type="text/javascript"> var tt = document.getElementsByTagName('body')[0]; tt.innerHTML = tt.innerHTML.replace(/\[\[\[([^\]]+)\]\]\]/igm, '<$1>');</script> <textarea id="txt" style="width:600px;height:500px"><P style="background-color:aqua;padding:30px;"><TABLE> <TBODY> <TR> <TD> <P id="img1" onclick="alert(this.parentElement.id)"><A href="http://image.img.com///2011/03/141740919.jpg" target=_blank><IMG class=imgborder border=1 alt=2011XUFULTZ src="templetfile/232958916.jpg" width=270 height=180></A></P> <P id="img1text" style="TEXT-ALIGN: center"><SPAN style="COLOR: #0000ff"><B>2011XUFULTZ</B></SPAN></P></TD> <TD> <P id="img2"><A href="http://image.img.com///2011/03/141804409.jpg" target=_blank><IMG class=imgborder border=1 alt=2012FT src="templetfile/233028672.jpg" width=270 height=180></A></P> <P id="img2text" style="TEXT-ALIGN: center"><SPAN style="COLOR: #0000ff"><B>2012</B></SPAN></P> </TD> </TR> </TBODY></TABLE></P><P><TABLE class=table_news border=0 cellSpacing=0 cellPadding=0 align=center> <THEAD> <TR> <TH>ch</TH> <TH>2011LTZ</TH> <TH>2012itanium</TH></TR></THEAD> <TBODY> <TR> <TD colSpan=3>外观尺寸及容量</TD></TR> <TR> <TD>长mm</TD> <TD>4597</TD> <TD>4534</TD></TR> <TR> <TD>宽mm</TD> <TD>1796</TD> <TD>1824</TD></TR> <TR> <TD>高mm</TD> <TD>1476</TD> <TD>1468</TD></TR> </TBODY></TABLE></P></textarea><br><input type=button value=替 换 onclick="javascript:txt.value=txt.value.replace(/<(?!\/?p\b)([^>]+)>/gi, '[$1]')"><input type=button value=替 换 onclick="javascript:txt.value=txt.value.replace(/\[([^\]]+)\]/gi, '<$1>')"> 纠正:上面<input type=button value=替 换 onclick="javascript:txt.value=txt.value.replace(/\[([^\]]+)\]/gi, '<$1>')">的“替换”应为“复原”,笔误。 12楼的貌似最合适了。咱写了个返回的函数,你就将就的用吧。不要给分<html><head> <title></title> <meta http-equiv="Content-Type" content="text/html;charset=GBK"></head><body><P> <TABLE class=table_news border=0 cellSpacing=0 cellPadding=0 align=center> <THEAD> <TR> <TH>ch</TH> <TH>2011LTZ</TH> <TH>2012itanium</TH></TR></THEAD> <TBODY> <TR> <TD colSpan=3>外观尺寸及容量</TD></TR> <TR> <TD>长mm</TD> <TD>4597</TD> <TD>4534</TD></TR> <TR> <TD>宽mm</TD> <TD>1796</TD> <TD>1824</TD></TR> <TR> <TD>高mm</TD> <TD>1476</TD> <TD>1468</TD></TR> </TBODY></TABLE></P><script type="text/javascript"> function re_table() { var pelems = document.getElementsByTagName("p"); for(i=0;i<pelems.length;i++) { var tab = pelems[i].innerHTML; var reg = /<([^<]+)>/g; pelems[i].innerHTML = tab.replace(reg,'[$1]').replace(/\r\n/g,'<br>'); } } function back_table() { var pelems = document.getElementsByTagName("p"); for(i=0;i<pelems.length;i++) { alert(pelems[i].innerHTML); var tab = pelems[i].innerHTML; var reg = /\[([^\[]+)\]/g; pelems[i].innerHTML = tab.replace(reg,'<$1>').replace('<br>',/\r\n/g); } } re_table(); back_table();</script></body></html> 适合是适合,但是第一次替换<([^<]+)>为[],第二次替换换行的思路和正则代码,全部源自hnxxwyq,可以说这个正则的原创者依然是hnxxwyq!其他几个代码都是依样画葫芦,拿去改改而已,正则思路并没有突破原格局!所以我尊重原创者#6hnxxwyq!呵呵! 还有10#的<(?!\/?p\b)([^>]+)>这个正则也具有一定创新性,不是简单拿别人的正则直接用,格局有所改变,也值得学习一下! 如果需要很精确的替换——<textarea id="txt" style="width:600px;height:500px"><P style="background-color:aqua;padding:30px;"><TABLE> <TBODY> <TR> <TD> <P id="img1" onclick="alert(this.parentElement.id)"><A href="http://image.img.com///2011/03/141740919.jpg" target=_blank><IMG class=imgborder border=1 alt=2011XUFULTZ src="templetfile/232958916.jpg" width=270 height=180></A></P> <P id="img1text" style="TEXT-ALIGN: center"><SPAN style="COLOR: #0000ff"><B>2011XUFULTZ</B></SPAN></P></TD> <TD> <P id="img2"><A href="http://image.img.com///2011/03/141804409.jpg" target=_blank><IMG class=imgborder border=1 alt=2012FT src="templetfile/233028672.jpg" width=270 height=180></A></P> <P id="img2text" style="TEXT-ALIGN: center"><SPAN style="COLOR: #0000ff"><B>2012</B></SPAN></P> </TD> </TR> </TBODY></TABLE></P><P><TABLE class=table_news border=0 cellSpacing=0 cellPadding=0 align=center> <THEAD> <TR> <TH>ch</TH> <TH>2011LTZ</TH> <TH>2012itanium</TH></TR></THEAD> <TBODY> <TR> <TD colSpan=3>外观尺寸及容量</TD></TR> <TR> <TD>长mm</TD> <TD>4597</TD> <TD>4534</TD></TR> <TR> <TD>宽mm</TD> <TD>1796</TD> <TD>1824</TD></TR> <TR> <TD>高mm</TD> <TD>1476</TD> <TD>1468</TD></TR> </TBODY></TABLE></P></textarea><br><input type=button value=替 换 onclick="javascript:txt.value=txt.value.replace(/<table[\S\s]*?\/table>/gi, function($){return $.replace(/<([^>]+)>/g, '[$1]')})"><input type=button value=复 原 onclick="javascript:txt.value=txt.value.replace(/\[([^\]]+)\]/gi, '<$1>')"> 楼上的这些如果,<p>外边有<table>的话,基本上外边的<table>也会替换的,当然如果没有<p>标签外存在的话,这个是不需要这么严谨的第二种如果有一个"[一]"这样的内容的话,也是会替换掉的所以没有那个正则一定是正确的答案,要根据自己的实际应用来衡量,简单就要楼上的,严谨就用我给你说的 这样的问题我想大家都在绕弯子吧本身就是不符合DTD的东西,为什么非要去做呢现在仅仅是为了一个select折腾个来回有必要吗?不说楼上诸位的正则缺陷,即使是正确的,对代码的可维护性有好处么 如何动态载入css文件? 各位大侠,帮看下这段代码什么意思,谢谢JX制作TAB表的 Extjs柱形图如何改变每个柱子的颜色? 100求教JavaScript中超连接问题 变量的引用问题 怎么去掉是html标记,并一行显示一条? 怎样判断网页是否处于最顶层框架! 求几条代码 看上去好乱!! 需一个窗口模式。。 C#正则跟JS正则哪里不同 大家好,帮我分析一段代码吧,很短。。。
<html>
<title>test</title>
<head>
<script type="text/javascript">
window.onload=function(){
//alert(document.getElementsByTagName('body')[0].getElementsByTagName('p')[0].innerHTML);
var tt=document.getElementsByTagName('body')[0].getElementsByTagName('p')[0].innerHTML;
var reg=/<([^>]+)>(.*?)<(\/[^>]+)>/igm;
var str=tt.replace(reg,'[$1]$2[$3]');
alert(str);
}
</script>
</head>
<body>
<P style="background-color:aqua;padding:30px;">
<TABLE>
<TBODY>
<TR>
<TD>
<P id="img1" onclick="alert(this.parentElement.id)"><A href="http://image.img.com///2011/03/141740919.jpg" target=_blank><IMG class=imgborder border=1 alt=2011XUFULTZ src="templetfile/232958916.jpg" width=270 height=180></A></P>
<P id="img1text" style="TEXT-ALIGN: center"><SPAN style="COLOR: #0000ff"><B>2011XUFULTZ</B></SPAN></P></TD>
<TD>
<P id="img2"><A href="http://image.img.com///2011/03/141804409.jpg" target=_blank><IMG class=imgborder border=1 alt=2012FT src="templetfile/233028672.jpg" width=270 height=180></A></P>
<P id="img2text" style="TEXT-ALIGN: center"><SPAN style="COLOR: #0000ff"><B>2012</B></SPAN></P>
</TD>
</TR>
</TBODY>
</TABLE>
</P>
<P>
<TABLE class=table_news border=0 cellSpacing=0 cellPadding=0 align=center>
<THEAD>
<TR>
<TH>ch</TH>
<TH>2011LTZ</TH>
<TH>2012itanium</TH></TR></THEAD>
<TBODY>
<TR>
<TD colSpan=3>外观尺寸及容量</TD></TR>
<TR>
<TD>长mm</TD>
<TD>4597</TD>
<TD>4534</TD></TR>
<TR>
<TD>宽mm</TD>
<TD>1796</TD>
<TD>1824</TD></TR>
<TR>
<TD>高mm</TD>
<TD>1476</TD>
<TD>1468</TD></TR>
</TBODY>
</TABLE>
</P>
</body>
</html>
<title>test</title>
<head>
<script type="text/javascript">
window.onload=function(){
//alert(document.getElementsByTagName('body')[0].getElementsByTagName('p')[0].innerHTML);
var tt = window.tt = document.getElementsByTagName('body')[0];
var content = tt.innerHTML;
var table = '', table_replace = '', tables = null;
var index = 0, prefix = '', after = '';
// 第一次找出所有p标签中的table
var reg1 = /\s*<p[^>]*>\s*(<table[^>]*>(?:\s*<(?!\/?table[^>]*>)[^>]+>[^<]*)+<\/table>)\s*<\/p>\s*/igm;
// 第二次将<>变成[]
var reg2 = /<([^>]+)>/igm;
while ((tables = reg1.exec(content)) != null) {
table = tables[1];
table_replace = table.replace(reg2, '[$1]');
// 查找字符串的位置, 将正确的内容替换回去
index = content.indexOf(table);
prefix = content.substring(0, index);
afterfix = content.substring(index + table.length);
content = prefix + table_replace + afterfix;
}
tt. innerHTML = content;
}
</script>
</head>
<body>
<P style="background-color:aqua;padding:30px;">
<TABLE>
<TBODY>
<TR>
<TD>
<P id="img1" onclick="alert(this.parentElement.id)"><A href="http://image.img.com///2011/03/141740919.jpg" target=_blank><IMG class=imgborder border=1 alt=2011XUFULTZ src="templetfile/232958916.jpg" width=270 height=180></A></P>
<P id="img1text" style="TEXT-ALIGN: center"><SPAN style="COLOR: #0000ff"><B>2011XUFULTZ</B></SPAN></P></TD>
<TD>
<P id="img2"><A href="http://image.img.com///2011/03/141804409.jpg" target=_blank><IMG class=imgborder border=1 alt=2012FT src="templetfile/233028672.jpg" width=270 height=180></A></P>
<P id="img2text" style="TEXT-ALIGN: center"><SPAN style="COLOR: #0000ff"><B>2012</B></SPAN></P>
</TD>
</TR>
</TBODY>
</TABLE>
</P>
<P>
<TABLE class=table_news border=0 cellSpacing=0 cellPadding=0 align=center>
<THEAD>
<TR>
<TH>ch</TH>
<TH>2011LTZ</TH>
<TH>2012itanium</TH></TR></THEAD>
<TBODY>
<TR>
<TD colSpan=3>外观尺寸及容量</TD></TR>
<TR>
<TD>长mm</TD>
<TD>4597</TD>
<TD>4534</TD></TR>
<TR>
<TD>宽mm</TD>
<TD>1796</TD>
<TD>1824</TD></TR>
<TR>
<TD>高mm</TD>
<TD>1476</TD>
<TD>1468</TD></TR>
</TBODY>
</TABLE>
</P>
</body>
</html>
\n 换 <br/> ....
真的很强悍!
楼主这个帖我不要分了,全给hnxxwyq吧!
<P style="background-color:aqua;padding:30px;">
<TABLE>
<TBODY>
<TR>
<TD>
<P id="img1" onclick="alert(this.parentElement.id)"><A href="http://image.img.com///2011/03/141740919.jpg" target=_blank><IMG class=imgborder border=1 alt=2011XUFULTZ src="templetfile/232958916.jpg" width=270 height=180></A></P>
<P id="img1text" style="TEXT-ALIGN: center"><SPAN style="COLOR: #0000ff"><B>2011XUFULTZ</B></SPAN></P></TD>
<TD>
<P id="img2"><A href="http://image.img.com///2011/03/141804409.jpg" target=_blank><IMG class=imgborder border=1 alt=2012FT src="templetfile/233028672.jpg" width=270 height=180></A></P>
<P id="img2text" style="TEXT-ALIGN: center"><SPAN style="COLOR: #0000ff"><B>2012</B></SPAN></P>
</TD>
</TR>
</TBODY>
</TABLE>
</P>
<P>
<TABLE class=table_news border=0 cellSpacing=0 cellPadding=0 align=center>
<THEAD>
<TR>
<TH>ch</TH>
<TH>2011LTZ</TH>
<TH>2012itanium</TH></TR></THEAD>
<TBODY>
<TR>
<TD colSpan=3>外观尺寸及容量</TD></TR>
<TR>
<TD>长mm</TD>
<TD>4597</TD>
<TD>4534</TD></TR>
<TR>
<TD>宽mm</TD>
<TD>1796</TD>
<TD>1824</TD></TR>
<TR>
<TD>高mm</TD>
<TD>1476</TD>
<TD>1468</TD></TR>
</TBODY>
</TABLE>
</P>
</textarea><script>
alert(txt.value.replace(/<(?!\/?p\b)([^>]+)>/gi, "[$1]"))
</script>
<head>
<title></title>
<meta http-equiv="Content-Type" content="text/html;charset=GBK">
</head>
<body>
<P>
<TABLE class=table_news border=0 cellSpacing=0 cellPadding=0 align=center>
<THEAD>
<TR>
<TH>ch</TH>
<TH>2011LTZ</TH>
<TH>2012itanium</TH></TR></THEAD>
<TBODY>
<TR>
<TD colSpan=3>外观尺寸及容量</TD></TR>
<TR>
<TD>长mm</TD>
<TD>4597</TD>
<TD>4534</TD></TR>
<TR>
<TD>宽mm</TD>
<TD>1796</TD>
<TD>1824</TD></TR>
<TR>
<TD>高mm</TD>
<TD>1476</TD>
<TD>1468</TD></TR>
</TBODY>
</TABLE>
</P>
<script type="text/javascript">
window.onload = function()
{
var pelems = document.getElementsByTagName("p");
for(i=0;i<pelems.length;i++)
{
var tab = pelems[i].innerHTML;
var reg = /<([^<]+)>/g;
pelems[i].innerHTML = tab.replace(reg,'[$1]').replace(/\r\n/g,'<br>');
}
}
</script>
</body>
</html>
[TABLE class=table_news border=0 cellSpacing=0 cellPadding=0 align=center] [THEAD] [TR] [TH]ch[/TH] [TH]2011LTZ[/TH] [TH]2012itanium[/TH][/TR][/THEAD] [TBODY] [TR] [TD colSpan=3]外观尺寸及容量[/TD][/TR] [TR] [TD]长mm[/TD] [TD]4597[/TD] [TD]4534[/TD][/TR] [TR] [TD]宽mm[/TD] [TD]1796[/TD] [TD]1824[/TD][/TR] [TR] [TD]高mm[/TD] [TD]1476[/TD] [TD]1468[/TD][/TR][/TBODY][/TABLE]
再变回原样呢?
<html>
<title>test</title>
<head>
<script type="text/javascript">
朋友你的代码实现了把<p>下的table代码都[]形式,我希望该再能实现把<p>[table]...[/table]</p>包替换回来</script>
</head>
<body>
<p>111111</p>
<p>222</p>
<P style="background-color:aqua;padding:30px;">
<TABLE>
<TBODY>
<TR>
<TD>
<P id="img1" onclick="alert(this.parentElement.id)"><A href="http://image.img.com///2011/03/141740919.jpg" target=_blank><IMG class=imgborder border=1 alt=2011XUFULTZ src="templetfile/232958916.jpg" width=270 height=180></A></P>
<P id="img1text" style="TEXT-ALIGN: center"><SPAN style="COLOR: #0000ff"><B>2011XUFULTZ</B></SPAN></P></TD>
<TD>
<P id="img2"><A href="http://image.img.com///2011/03/141804409.jpg" target=_blank><IMG class=imgborder border=1 alt=2012FT src="templetfile/233028672.jpg" width=270 height=180></A></P>
<P id="img2text" style="TEXT-ALIGN: center"><SPAN style="COLOR: #0000ff"><B>2012</B></SPAN></P>
</TD>
</TR>
</TBODY>
</TABLE>
</P>
<p>33333</p>
<P>
<TABLE class=table_news border=0 cellSpacing=0 cellPadding=0 align=center>
<THEAD>
<TR>
<TH>ch</TH>
<TH>2011LTZ</TH>
<TH>2012itanium</TH></TR></THEAD>
<TBODY>
<TR>
<TD colSpan=3>外观尺寸及容量</TD></TR>
<TR>
<TD>长mm</TD>
<TD>4597</TD>
<TD>4534</TD></TR>
<TR>
<TD>宽mm</TD>
<TD>1796</TD>
<TD>1824</TD></TR>
<TR>
<TD>高mm</TD>
<TD>1476</TD>
<TD>1468</TD></TR>
</TBODY>
</TABLE>
</P>
</body>
</html>
我个人的理解是:字面意思为:<符号后为,不是0个或1个单词边界的p标签,之后为1个或多个不是>字符的任何符号并以>结尾意思就是匹配除了<p>或</p>以外的任何<...>,</...>这样的元素标签。不知道我的理解有没有错!欢迎指正!
如果你只是为了替换后处理过以后再替换回来,建议你直接用 [[[table]]]代替[table], 以便减小误差,这样的话你就可以直接
<script type="text/javascript">
var tt = document.getElementsByTagName('body')[0];
tt.innerHTML = tt.innerHTML.replace(/\[\[\[([^\]]+)\]\]\]/igm, '<$1>');
</script>
<P style="background-color:aqua;padding:30px;">
<TABLE>
<TBODY>
<TR>
<TD>
<P id="img1" onclick="alert(this.parentElement.id)"><A href="http://image.img.com///2011/03/141740919.jpg" target=_blank><IMG class=imgborder border=1 alt=2011XUFULTZ src="templetfile/232958916.jpg" width=270 height=180></A></P>
<P id="img1text" style="TEXT-ALIGN: center"><SPAN style="COLOR: #0000ff"><B>2011XUFULTZ</B></SPAN></P></TD>
<TD>
<P id="img2"><A href="http://image.img.com///2011/03/141804409.jpg" target=_blank><IMG class=imgborder border=1 alt=2012FT src="templetfile/233028672.jpg" width=270 height=180></A></P>
<P id="img2text" style="TEXT-ALIGN: center"><SPAN style="COLOR: #0000ff"><B>2012</B></SPAN></P>
</TD>
</TR>
</TBODY>
</TABLE>
</P>
<P>
<TABLE class=table_news border=0 cellSpacing=0 cellPadding=0 align=center>
<THEAD>
<TR>
<TH>ch</TH>
<TH>2011LTZ</TH>
<TH>2012itanium</TH></TR></THEAD>
<TBODY>
<TR>
<TD colSpan=3>外观尺寸及容量</TD></TR>
<TR>
<TD>长mm</TD>
<TD>4597</TD>
<TD>4534</TD></TR>
<TR>
<TD>宽mm</TD>
<TD>1796</TD>
<TD>1824</TD></TR>
<TR>
<TD>高mm</TD>
<TD>1476</TD>
<TD>1468</TD></TR>
</TBODY>
</TABLE>
</P>
</textarea>
<br>
<input type=button value=替 换 onclick="javascript:txt.value=txt.value.replace(/<(?!\/?p\b)([^>]+)>/gi, '[$1]')">
<input type=button value=替 换 onclick="javascript:txt.value=txt.value.replace(/\[([^\]]+)\]/gi, '<$1>')">
<html>
<head>
<title></title>
<meta http-equiv="Content-Type" content="text/html;charset=GBK">
</head>
<body>
<P>
<TABLE class=table_news border=0 cellSpacing=0 cellPadding=0 align=center>
<THEAD>
<TR>
<TH>ch</TH>
<TH>2011LTZ</TH>
<TH>2012itanium</TH></TR></THEAD>
<TBODY>
<TR>
<TD colSpan=3>外观尺寸及容量</TD></TR>
<TR>
<TD>长mm</TD>
<TD>4597</TD>
<TD>4534</TD></TR>
<TR>
<TD>宽mm</TD>
<TD>1796</TD>
<TD>1824</TD></TR>
<TR>
<TD>高mm</TD>
<TD>1476</TD>
<TD>1468</TD></TR>
</TBODY>
</TABLE>
</P>
<script type="text/javascript">
function re_table()
{
var pelems = document.getElementsByTagName("p");
for(i=0;i<pelems.length;i++)
{
var tab = pelems[i].innerHTML;
var reg = /<([^<]+)>/g;
pelems[i].innerHTML = tab.replace(reg,'[$1]').replace(/\r\n/g,'<br>');
}
}
function back_table()
{
var pelems = document.getElementsByTagName("p");
for(i=0;i<pelems.length;i++)
{
alert(pelems[i].innerHTML);
var tab = pelems[i].innerHTML;
var reg = /\[([^\[]+)\]/g;
pelems[i].innerHTML = tab.replace(reg,'<$1>').replace('<br>',/\r\n/g);
}
}
re_table();
back_table();
</script>
</body>
</html>
适合是适合,但是第一次替换<([^<]+)>为[],第二次替换换行的思路和正则代码,全部源自hnxxwyq,可以说这个正则的原创者依然是hnxxwyq!其他几个代码都是依样画葫芦,拿去改改而已,正则思路并没有突破原格局!所以我尊重原创者#6hnxxwyq!呵呵!
<P style="background-color:aqua;padding:30px;">
<TABLE>
<TBODY>
<TR>
<TD>
<P id="img1" onclick="alert(this.parentElement.id)"><A href="http://image.img.com///2011/03/141740919.jpg" target=_blank><IMG class=imgborder border=1 alt=2011XUFULTZ src="templetfile/232958916.jpg" width=270 height=180></A></P>
<P id="img1text" style="TEXT-ALIGN: center"><SPAN style="COLOR: #0000ff"><B>2011XUFULTZ</B></SPAN></P></TD>
<TD>
<P id="img2"><A href="http://image.img.com///2011/03/141804409.jpg" target=_blank><IMG class=imgborder border=1 alt=2012FT src="templetfile/233028672.jpg" width=270 height=180></A></P>
<P id="img2text" style="TEXT-ALIGN: center"><SPAN style="COLOR: #0000ff"><B>2012</B></SPAN></P>
</TD>
</TR>
</TBODY>
</TABLE>
</P>
<P>
<TABLE class=table_news border=0 cellSpacing=0 cellPadding=0 align=center>
<THEAD>
<TR>
<TH>ch</TH>
<TH>2011LTZ</TH>
<TH>2012itanium</TH></TR></THEAD>
<TBODY>
<TR>
<TD colSpan=3>外观尺寸及容量</TD></TR>
<TR>
<TD>长mm</TD>
<TD>4597</TD>
<TD>4534</TD></TR>
<TR>
<TD>宽mm</TD>
<TD>1796</TD>
<TD>1824</TD></TR>
<TR>
<TD>高mm</TD>
<TD>1476</TD>
<TD>1468</TD></TR>
</TBODY>
</TABLE>
</P>
</textarea>
<br>
<input type=button value=替 换 onclick="javascript:txt.value=txt.value.replace(/<table[\S\s]*?\/table>/gi, function($){return $.replace(/<([^>]+)>/g, '[$1]')})">
<input type=button value=复 原 onclick="javascript:txt.value=txt.value.replace(/\[([^\]]+)\]/gi, '<$1>')">
楼上的这些如果,<p>外边有<table>的话,基本上外边的<table>也会替换的,当然如果没有<p>标签外存在的话,这个是不需要这么严谨的第二种如果有一个"[一]"这样的内容的话,也是会替换掉的所以没有那个正则一定是正确的答案,要根据自己的实际应用来衡量,简单就要楼上的,严谨就用我给你说的
本身就是不符合DTD的东西,为什么非要去做呢
现在仅仅是为了一个select折腾个来回有必要吗?
不说楼上诸位的正则缺陷,即使是正确的,对代码的可维护性有好处么