正则表达式如何替换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|\ \;|| |\xc2\xa0)*?<\/p>/ig,""); str=str.replace(/<p>\s*?<\/p>/ig,""); str=str.replace(/<p> <\/p>/ig,""); str=str.replace(/<brtype="_moz">\n <\/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 <\/p>/ig,"</p>"); str=str.replace(/<br>\n <\/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> </td> <td><tablewidth="100%"border="1"cellspacing="0"cellpadding="0"> <tr> <td> </td> </tr> </table> <tablewidth="100%"border="1"cellspacing="0"cellpadding="0"> <tr> <td> </td> </tr> </table></td> <td> </td> </tr> <tr> <td> </td> <td> </td> <td><tablewidth="100%"border="1"cellspacing="0"cellpadding="0"> <tr> <td> </td> </tr> </table></td> </tr> <tr> <td><tablewidth="100%"border="1"cellspacing="0"cellpadding="0"> <tr> <td> </td> </tr> </table></td> <td> </td> <td> </td> </tr> </table>
-------------------获取3个match
============================================match2 <tr> <td> </td> <td><table width="100%" border="1" cellspacing="0" cellpadding="0"> <tr> <td> </td> </tr>
</table> <table width="100%" border="1" cellspacing="0" cellpadding="0"> <tr> <td> </td> </tr> </table></td> <td> </td> </tr>==============================================match3 <tr> <td> </td> <td> </td> <td><table width="100%" border="1" cellspacing="0" cellpadding="0">
<tr> <td> </td> </tr> </table></td> </tr>==============================================match4 <tr> <td><table width="100%" border="1" cellspacing="0" cellpadding="0"> <tr> <td> </td> </tr>
</table></td> <td> </td> <td> </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这一问题有了更深刻的体会,具体使用情况还需要大家实践验证。这里是恰卡编程网,小编将为大家推送更多相关知识点的文章,欢迎关注!
推荐阅读
-
正则指引(第2版)
-
密码格式验证的常用正则表达式有哪些
密码格式验证的常用正则表达式有哪些这篇文章主要为大家展示了“密码格...
-
正则替换如何实现输入框只能有数字、中英文逗号
正则替换如何实现输入框只能有数字、中英文逗号这篇文章将为大家详细讲...
-
正则表达式匹配原理之逆序环视的示例分析
-
正则如何实现替换换行符和把br替换成换行符
正则如何实现替换换行符和把br替换成换行符这篇文章主要介绍了正则如...
-
如何使用正则匹配电话号手机号邮箱网址
如何使用正则匹配电话号手机号邮箱网址这篇文章主要介绍了如何使用正则...
-
怎么用正则批量去除Teleport Pro整站下载文件冗余代码
-
如何使用正则限制input框只能输入数字/英文/中文等限制
如何使用正则限制input框只能输入数字/英文/中文等限制这篇文章...
-
正则表达式如何实现逆序环视
-
如何使用正则表达式
如何使用正则表达式这篇文章将为大家详细讲解有关如何使用正则表达式,...