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

        //获取公示栏内容
         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(/&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>
  
时间: 2024-10-11 10:33:25

js正则匹配table,img及去除各种标签问题的相关文章

常用JS正则匹配函数

//校验用户名:只能输入1-30个字母 function isTrueName(s) { var patrn=/^[a-zA-Z]{1,30}$/; if (!patrn.exec(s)) return false return true } //校验密码:只能输入6-20个字母.数字.下划线 function isPasswd(s) { var patrn=/^(/w){6,20}$/; if (!patrn.exec(s)) return false return true } //校验普通

js 正则匹配 域名【host】

如果直接在js中是可以直接取到hostname的,以下方式是通过正则匹配: var url = "http://www.cnblogs.com/cench" var reg = /^http(s)?:\/\/(.*?)\// // 必须是http开头或者https开头,结尾为'/' // 把host替换成指定数值 var ToReplace = 'Host/' url.replace(reg, ToReplace) // Host/cench //*******************

js正则匹配两位小数

今天写一个用js正则校验最多保留两位小数的格式. a = /^\d+|\d+\.\d{1,2}$/; 测试 a.test(1.222); 结果:true 一下蒙了,怎么可能,最后找了好久,原来需要把^和$中间的格式包起来 a = /^(\d+|\d+\.\d{1,2})$/; 测试a.test(1.222); 结果:false 分析:如果不用括号包起来,则匹配^\d+或\d+\.\d{1,2} 1.222一下就匹配了^\d,因为只要以数字开头就匹配嘛 最终从网上找到一个更好的匹配两位小数的正则:

js 正则匹配(去掉html标签)

1,得到网页上的链接地址: string matchString = @"<a[^>]+href=\s*(?:'(?<href>^']+)'|""(?<href>[^""]+)""|(?<href>[^>\s]+))\s*[^>]*>"; 2,得到网页的标题: string matchString = @"<title>(?<titl

js正则匹配

var text = "testing: 1, 2, 3";var pattern = /\d+/g;pattern.test(text) //=>true :匹配成功text.search(pattern);//=> 9:首次匹配成功的位置(从0开始计数)text.match(pattern);//=>["1", "2", "3"]:所有匹配组成的数组text.replace(pattern, '#');/

js正则匹配的出链接地址

content为需要匹配的值 var b=/<a([\s]+|[\s]+[^<>]+[\s]+)href=(\"([^<>"\']*)\"|\'([^<>"\']*)\')[^<>]*>/gi;      var s=content.toLowerCase().match(b);      //得到链接地址      for(var i= 0;i<s.length;i++)      {       

js正则匹配html内容

1.得到网页上的链接地址: string matchString = @"<a[^>]+href=\s*(?:'(?<href>[^']+)'|""(?<href>[^""]+)""|(?<href>[^>\s]+))\s*[^>]*>"; 2.得到网页的标题: string matchString = @"<title>(?<tit

探究js正则匹配方法:match和exec

match是字符串方法,写法为:str.match(reg) exec是正则表达式方法,写法为:reg.exec(str) match和exec在匹配成功时返回的都是数组,在没有匹配上时返回的都是null,故在没有深入了解两者的使用规则前,会误以为两者的使用效果是一样的,下面在几种情况中对match和exec进行区分. 1.全局匹配: 当不使用全局匹配时,两者的匹配效果是一样的,仅返回第一次匹配成功的结果: var s = "aaa bbb ccc"; var reg = /\b\w+

JS正则匹配邮箱格式

观察一些邮箱格式,有些邮箱格式简单,有些复杂,在网上找了个邮箱的正则表达式,分析一下邮箱的规则.该表达式:/^\w+([\.\-]\w+)*\@\w+([\.\-]\w+)*\.\w+$/ 拆分:[1]/^\w+以英文,数字,下划线开头,(一个或多个.)[2]([\.\-]\w+)*跟着点或中线任意一个,然后再跟着的英文.数字.下划线(一个或多个).这个整个部分用圆括号括起来,可以零个一个或多个.(可有可无,可多个)[3]\@\w+跟着一个@符号,后面英文.数字.下划线(一个或多个)[4]([\