• js正则匹配table,img及去除各种标签问题


            
            //获取公示栏内容
             s = "$row.detail$";
             mainContent =s;
             
             //如果有多个table使用下面注释的正则只会匹配成一个table
             //var tabReg = /<table[^>]*>((?!table).)*</table>/gi;
            //匹配单个table
             var tabReg = /<table[^>]*>s*(<tbody[^>]*>)?(s*<tr[^>]*>[sS]*?</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(/&nbsp;/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;
           }
            
            
            /*  currentArray:当前页以 * 分割后的数组
                replaceCount:从开始内容到当前页的内容 * 的个数
                matchArray : img标签的匹配的内容
            */
            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>
      
  • 相关阅读:
    java——多线程——Thread类的常用方法——sleep
    java——多线程——进程的理解
    java——多线程——主线程的概念
    java 一个对象的内存图
    Vue实现鼠标拖拽滚动效果,滚动方向不同控制不同组件滚动自定义指令
    uniapp封装axios
    移动端经典布局左边导航右边滚动列表
    uniapp将盒子铺满页面,适应导航栏高度,无滚动条
    vue/uniapp 用键值对的形式动态控制class,事先导航栏效果
    Vue新建项目
  • 原文地址:https://www.cnblogs.com/zoro-zero/p/4040343.html
Copyright © 2020-2023  润新知