正则表达式如何替换table表格中的样式与空标记同时保留rowspan与colspan

这篇文章主要讲解了“正则表达式如何替换table表格中的样式与空标记同时保留rowspan与colspan”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“正则表达式如何替换table表格中的样式与空标记同时保留rowspan与colspan”吧!

完整测试代码

<script>
varstr='<p>';
str='<tableid="tblSort"cellspacing="0"helvetica=""sans=""><trid="sdf"><tdclass="ok"colspan="8"height="500"rowspan="5">';
str+='<tdstyle="color:blue"colspan="8"rowspan="5">';
str+='<tdid="asdfj"class="dbclick"><spanid="s159015"class="p_check"><ahref="http://www.17ce.com/site/dns/20200408_3875c5d0799211eab8bc2bbb7b33a12c:1.html#s159015"rel="externalnofollow"rel="externalnofollow"rel="externalnofollow"rel="externalnofollow"rel="externalnofollow"rel="externalnofollow"rel="externalnofollow"rel="externalnofollow">GET</a><ahref="http://www.17ce.com/site/dns/20200408_3875c5d0799211eab8bc2bbb7b33a12c:1.html#s159015"rel="externalnofollow"rel="externalnofollow"rel="externalnofollow"rel="externalnofollow"rel="externalnofollow"rel="externalnofollow"rel="externalnofollow"rel="externalnofollow">PING</a><ahref="http://www.17ce.com/site/dns/20200408_3875c5d0799211eab8bc2bbb7b33a12c:1.html#s159015"rel="externalnofollow"rel="externalnofollow"rel="externalnofollow"rel="externalnofollow"rel="externalnofollow"rel="externalnofollow"rel="externalnofollow"rel="externalnofollow">Trace</a><ahref="http://www.17ce.com/site/dns/20200408_3875c5d0799211eab8bc2bbb7b33a12c:1.html#s159015"rel="externalnofollow"rel="externalnofollow"rel="externalnofollow"rel="externalnofollow"rel="externalnofollow"rel="externalnofollow"rel="externalnofollow"rel="externalnofollow">Dig</a></span></td>';
str+='<tdclass="sdf"colspan="8"rowspan="5"><p>jb51.net</p></td>';
str+='<tdclass="sdf"colspan="8"rowspan="5"width="100"></td></tr></table>';

str+='<table><trstyle="color:bluefffffffffffffffffffffffffffffffffffffffffff"><tdclass="ok"colspan="8"height="500"rowspan="5">';
str+='<trid="trinfo146798"class="alt"><tdid="tdinfo146798"colspan="16"></td></tr>';
str+='<tdid="asdfj"class="dbclick"><spanid="s159015"class="p_check"><ahref="http://www.17ce.com/site/dns/20200408_3875c5d0799211eab8bc2bbb7b33a12c:1.html#s159015"rel="externalnofollow"rel="externalnofollow"rel="externalnofollow"rel="externalnofollow"rel="externalnofollow"rel="externalnofollow"rel="externalnofollow"rel="externalnofollow">GET</a><ahref="http://www.17ce.com/site/dns/20200408_3875c5d0799211eab8bc2bbb7b33a12c:1.html#s159015"rel="externalnofollow"rel="externalnofollow"rel="externalnofollow"rel="externalnofollow"rel="externalnofollow"rel="externalnofollow"rel="externalnofollow"rel="externalnofollow">PING</a><ahref="http://www.17ce.com/site/dns/20200408_3875c5d0799211eab8bc2bbb7b33a12c:1.html#s159015"rel="externalnofollow"rel="externalnofollow"rel="externalnofollow"rel="externalnofollow"rel="externalnofollow"rel="externalnofollow"rel="externalnofollow"rel="externalnofollow">Trace</a><ahref="http://www.17ce.com/site/dns/20200408_3875c5d0799211eab8bc2bbb7b33a12c:1.html#s159015"rel="externalnofollow"rel="externalnofollow"rel="externalnofollow"rel="externalnofollow"rel="externalnofollow"rel="externalnofollow"rel="externalnofollow"rel="externalnofollow">Dig</a></span></td>';
str+='<tdclass="sdf"colspan="8"rowspan="5"><p>jb51.net</p></td>';
str+='<tdclass="sdf"colspan="8"rowspan="5"width="100"><fontcolor="#0f0000">122.227.189.106[中国浙江宁波电信]</font><br/></td></tr></table>';

str+='<p><imgalt=""src="//img.jbzj.com/file_images/article/202004/2020041112113912.png"/></p>';
str+='<p>选择安装然后选择全新的sqlserver独立安装</p>';
str+='<p><imgalt=""src="//img.jbzj.com/file_images/article/202004/2020041112113913.png"/></p>';

console.log(str);

//去除table的宽度
str=str.replace(/<table[^>]*>/ig,"<table>");
str=str.replace(/<table[^>]*>[\s\S]*?<\/table>/gi,function(match,capture){
match=match.replace(/(style|class|id)[\s]*=[\s]*("|')[^<>"']*?\2/gi,'');
match=match.replace(/<\/?span[^<>]*>/gi,'');
match=match.replace(/<p[^<>]*>|<\/p>/gi,'');
match=match.replace(/<font[^<>]*>|<\/font>/gi,'');
returnmatch;
});

//alert(str);
console.log(str);
</script>

原来的代码是这样的

//普通替换
functiondoRepNormal(s){
varstr=s.replace(/<p><brtype="_moz">\s*?<\/p>/ig,"");
str=str.replace(/<p>\s*?<brtype="_moz">\s*?<\/p>/ig,"");
str=str.replace(/<p>(\s|\&nbsp\;|| |\xc2\xa0)*?<\/p>/ig,"");
str=str.replace(/<p>\s*?<\/p>/ig,"");
str=str.replace(/<p>&nbsp;<\/p>/ig,"");
str=str.replace(/<brtype="_moz">\n&nbsp;<\/p>/ig,"</p>");
str=str.replace(/<brtype="_moz">\s*?<\/p>/ig,"</p>");
str=str.replace(/<br\s*?\/?>\s*?<\/p>/ig,"</p>");
str=str.replace(/<br\/>\n&nbsp;<\/p>/ig,"</p>");
str=str.replace(/<br>\n&nbsp;<\/p>/ig,"</p>");
//表格替换
str=str.replace(/<table[^>]*>/ig,"<table>");
str=str.replace(/<table[^>]*>[\s\S]*?<\/table>/gi,function(match,capture){
match=match.replace(/style[\s]*=[\s]*("|')[^<>"']*?\1/gi,'');
match=match.replace(/cl\ass[\s]*=[\s]*("|')[^<>"']*?\1/gi,'');
match=match.replace(/id[\s]*=[\s]*("|')[^<>"']*?\1/gi,'');
match=match.replace(/<font[^<>]*>|<\/font>/gi,'');
returnmatch;
});
str=str.replace(/<td[^>]*>/gi,function(match,capture){
match=match.replace(/style[\s]*=[\s]*("|')[^<>"']*?\1/gi,'');
match=match.replace(/cl\ass[\s]*=[\s]*("|')[^<>"']*?\1/gi,'');
match=match.replace(/id[\s]*=[\s]*("|')[^<>"']*?\1/gi,'');
returnmatch;
});
returnstr;
}

后台修改成这样的

str=str.replace(/<table[^>]*>/ig,"<table>");
str=str.replace(/<table[^>]*>[\s\S]*?<\/table>/gi,function(match,capture){
match=match.replace(/(style|class|id)[\s]*=[\s]*("|')[^<>"']*?\2/gi,'');
match=match.replace(/<\/?span[^<>]*>/gi,'');
match=match.replace(/<p[^<>]*>|<\/p>/gi,'');
match=match.replace(/<font[^<>]*>|<\/font>/gi,'');
returnmatch;
});

经过测试发现chrome中正常,但在ie8与ie7中有bug无法实现class与id的替换,文档声明<!DOCTYPE html>都会影响一些结果,真是涨了见识

正好看到别的人分享的先留存一份,后续更新

用正则表达式取出table中的所有行(支持嵌套table)

此是通过csdn询问得高人之手写的。谢谢gzdiablo

表达式:

<tr[^>]*>(?:(?:\s|\S)*?(?=<table|</tr>)(?(<table)<table[^>]*>(?:\s|\S)*?(?:</table>|(?:(?:<table[^>]*>(?:\s|\S)*?</table>(?:\s|\S)*?)*?</table>))(?:\s|\S)*?|))*</tr>

一条表达式就可以获取你想要的写得好辛苦测试:

<tablewidth="300"border="1"cellspacing="0"cellpadding="0">
<tr>
<td>&nbsp;</td>
<td><tablewidth="100%"border="1"cellspacing="0"cellpadding="0">
<tr>
<td>&nbsp;</td>
</tr>

</table>
<tablewidth="100%"border="1"cellspacing="0"cellpadding="0">
<tr>
<td>&nbsp;</td>
</tr>
</table></td>
<td>&nbsp;</td>
</tr>
<tr>
<td>&nbsp;</td>
<td>&nbsp;</td>
<td><tablewidth="100%"border="1"cellspacing="0"cellpadding="0">

<tr>
<td>&nbsp;</td>
</tr>
</table></td>
</tr>
<tr>
<td><tablewidth="100%"border="1"cellspacing="0"cellpadding="0">
<tr>
<td>&nbsp;</td>
</tr>

</table></td>
<td>&nbsp;</td>
<td>&nbsp;</td>
</tr>
</table>

-------------------获取3个match

============================================match2 <tr> <td>&nbsp;</td> <td><table width="100%" border="1" cellspacing="0" cellpadding="0"> <tr> <td>&nbsp;</td> </tr>

</table> <table width="100%" border="1" cellspacing="0" cellpadding="0"> <tr> <td>&nbsp;</td> </tr> </table></td> <td>&nbsp;</td> </tr>==============================================match3 <tr> <td>&nbsp;</td> <td>&nbsp;</td> <td><table width="100%" border="1" cellspacing="0" cellpadding="0">

<tr> <td>&nbsp;</td> </tr> </table></td> </tr>==============================================match4 <tr> <td><table width="100%" border="1" cellspacing="0" cellpadding="0"> <tr> <td>&nbsp;</td> </tr>

</table></td> <td>&nbsp;</td> <td>&nbsp;</td> </tr>

正则表达式匹配html标签table

首先,要匹配任意内容“.”是不行的,因为不匹配“\n”,取不到想要的内容,所以有了如下表达式: [\s\S]*

当然,你也可以用 “[\d\D]*”、“[\w\W]*” 来表示。

现在我们来匹配一个html标签,匹配table如下:

<table.*?>[\s\S]*<\/table>或<table.*?>[\s\S]*?<\/table>

以上两个表达式,一个加了"?"和一个却不加“?”,那么这有什么区别呢?我们知道“?”在正则表达式里是一个通配符:匹配前面的子表达式零次或一次,或指明一个非贪婪限定符。

在这里,通过测试,我们得出这样的结论:在不加“?”的情况下,在匹配下面一段内容的时候:

<table>这是第一个table</table>我不是table里的内容<table>这是第二个table</table>我也不是table里的内容<table>这是第三个table</table>

会把以<table>开始,</table>结束的内容都匹配出来

加了“?”之后,只匹配第n个匹配的内容

完整测试代码恰卡编程网小编提供

<script>
varstr='<table>这是第一个table</table>';
str+='我不是table里的内容';
str+='<table>这是第二个table</table>';
str+='我也不是table里的内容';
str+='<table>这是第三个table</table>';

varreg1=/<table.*?>[\s\S]*<\/table>/gi;
varres1=str.match(reg1);
console.log(res1)
varreg2=/<table.*?>[\s\S]*?<\/table>/gi;
varres2=str.match(reg2);
console.log(res2)
</script>

效果图

正则表达式如何替换table表格中的样式与空标记同时保留rowspan与colspan

感谢各位的阅读,以上就是“正则表达式如何替换table表格中的样式与空标记同时保留rowspan与colspan”的内容了,经过本文的学习后,相信大家对正则表达式如何替换table表格中的样式与空标记同时保留rowspan与colspan这一问题有了更深刻的体会,具体使用情况还需要大家实践验证。这里是恰卡编程网,小编将为大家推送更多相关知识点的文章,欢迎关注!

发布于 2021-03-11 12:40:43
收藏
分享
海报
0 条评论
179
上一篇:js 正则如何匹配字符串字面量 下一篇:audio指的是什么接口
目录

    0 条评论

    本站已关闭游客评论,请登录或者注册后再评论吧~

    忘记密码?

    图形验证码