正文

js正则匹配table,img及去除各种标签问题(正则表达式去除空行)越早知道越好

文章摘要

这篇文章主要介绍了如何从网页内容中提取和处理特定信息,尤其是表格和图片内容。代码使用JavaScript语言,通过正则表达式匹配HTML标签,处理表格内容(替换为占位符#),处理图片标记(替换为*),并处理特殊HTML标签(如<p>和<br>)。此外,代码还实现了分页显示功能,根据当前页数提取相应内容,并对处理后的内容进行进一步替换和显示。文章的核心内容集中在数据提取、内容处理和分页显示的实现上。

 //获取公示栏内容 s=”$row.detail$”; mainContent=s; //如果有多个table使用下面注释的正则只会匹配成一个table //var tabReg=/<table[^>]*>((?!table).)*</table>/gi; //匹配单个table var tabReg=/<table[^>]*>\s*(<tbody[^>]*>)?(\s*<tr[^>]*>[\s\S]*?</tr>\s*)*(</tbody>)?\s*</table>/gi; var tabMatch=tabReg.test(s); var tabMatchContentArray=s.match(tabReg); if(tabMatch) { mainContent=s.replace(tabReg,”#”); } //对img标签进行匹配 var imgReg=/<img.*?(?:>|/>)/gi; imgMatchContentArray=s.match(imgReg); if(imgReg.test(s)) { //将img标签替换为* mainContent=mainContent.replace(imgReg,”*”); } //处理html标签 mainContent=mainContent.replace(/ /gi,” “); var pReg1=/<p>/gi; var pReg2=/</p>/gi; mainContent=mainContent.replace(pReg1,””).replace(pReg2,”<br />”); //下面的htmlReg1 ,htmlReg2可以匹配任意标签 // var htmlReg1=/<[^>]+>/gi; // var htmlReg2=/<(.+?)[\s]*/?[\s]*>/gi; // // mainContent=mainContent.replace(htmlReg1,””).replace(htmlReg2,””); //mainContent=mainContent.replace(/&/gi,”<p>”).replace(/@/gi,”</p>”); var pageIndex=1; var size=500; var tableContentArray=mainContent.split(“#”); var array=[]; //存放以table分割后的数组中每个数组可以分作几页 var arrayIndex=[]; //存放table在内容中的索引 var len=0; for(var i=0;i<tableContentArray.length;i++) { var con=tableContentArray[i]; len +=con.length; arrayIndex[i]=len; array[i]=Math.ceil(con.length /size); } var tableIndexArray=[];//存放table内容页码数 var sum=1; for(var j=0;j<array.length-1;j++) { sum +=array[j]; tableIndexArray[j]=sum; } var currentPageContent=mainContent.substr((pageIndex-1)*size,size); if(tableIndexArray.indexOf(pageIndex) >=0) { currentPageContent=tabMatchContentArray[tableIndexArray.indexOf(pageIndex)]; } if(currentPageContent.indexOf(“#”)!=-1) { var beginToCurrentPageContent=mainContent.substr(0,pageIndex*size); var tabLastIndex=beginToCurrentPageContent.lastIndexOf(“#”); currentPageContent=currentPageContent.substr(0,tabLastIndex-(pageIndex-1)*size); //当前页是否有 * 获取最后一个 * 的位置 var indexOf=currentPageContent.indexOf(“*”); if(indexOf >=0) { //获取开始到当前页位置的内容 中的 * 的最后的下标 var reCount=beginToCurrentPageContent.split(“*”).length – 1; var contentArray=currentPageContent.split(“*”); currentPageContent=replaceImgContent(contentArray,reCount,imgMatchContentArray); } } else { //当前页是否有 * 获取最后一个 * 的位置 var indexOf=currentPageContent.indexOf(“*”); if(indexOf >=0) { //获取从开始位置到当前页位置的内容 var beginToCurrentPageContent=mainContent.substr(0,pageIndex*size); //获取开始到当前页位置的内容 中的 * 的最后的下标 var reCount=beginToCurrentPageContent.split(“*”).length – 1; var contentArray=currentPageContent.split(“*”); currentPageContent=replaceImgContent(contentArray,reCount,imgMatchContentArray); } } if(currentPageContent==””) { alert(“页码数超过范围”); } else { document.getElementById(“annouContent”).innerHTML=currentPageContent; } function replaceImgContent(currentArray,replaceCount,matchArray) { var result=””; for(var i=currentArray.length -1,j=replaceCount-1 ;i>=1; i–) { var temp=(matchArray[j] + currentArray[i]); result=temp + result; j–; } result=currentArray[0] + result ; return result; } </script>