js截取字符串

  1.  /*     
  2.         * 调整截取的字符串的位置。因为在截取一个字符串后可能存在两种情况:  
  3.         * (1)字符串末位正好处于一个标签的属性之中的某个位置。如:<<SPAN style="COLOR: #ff0000">a id="xxx"  href="xxx"</SPAN>  
  4. ></a>中红色标注的位置。  
  5.         * (2)字符串末位处于一个标签内容之中的某个位置。如:<<SPAN style="COLOR: #000000">a</SPAN>  
  6. ><SPAN style="COLOR: #ff0000">here</SPAN>  
  7. </a> 中红色标注的位置。  
  8.         *  对于这两种情况,第二种情况可以无需特殊处理,但是第一种情况的话得将整个标签删除或者将其属性补全。删除的话  
  9.         *  将字符串的末尾位置前移至标签开始之前;而补全则是将末尾位置后移至次标签的'>'处。这里采用的是删除的方法。  
  10.         */  
  11.     function adjustByTagPostion(str){   
  12.         var left_brace_index = str.lastIndexOf('<');   
  13.         var right_brace_index = str.lastIndexOf('>');   
  14.         // 为true的话则表示字符串处于第一种情况,需要进行删除操作。   
  15.                var inTagDefinition = left_brace_index > right_brace_index;   
  16.         return inTagDefinition ? str.substring(0,left_brace_index) : str;   
  17.     }   
  18.   
  19.     // 将未闭合的标签按序闭合。   
  20.     function modifyDisplayString(original, addTags){   
  21.         var tagLenth = addTags.length;   
  22.         for(var i = tagLenth-1; i >= 0; i--){   
  23.             original += '</' + addTags[i] + '>';   
  24.         }   
  25.         return original;   
  26.     }   
  27.   
  28.     //    
  29.     function splitString(original, length){   
  30.                // 此数组用于保存那些未闭合的标签。   
  31.         var non_match_tag = []   
  32.                // 如果大于字符串的总长度,返回整个字符串;否则返回指定长度的子串   
  33.         var to = length >= original.length ? original.length : length;   
  34.         var substring = original.substring(0,to);   
  35.   
  36.                // 调整字符串。   
  37.         adjustedSubString = adjustByTagPostion(substring);   
  38.         var tag_pattern = /<\s*(\w+\b)(?:[^>]*[^\/])?>|<(\/\w+)>/ig   
  39.   
  40.         adjustedSubString.replace(tag_pattern, function(match,$1,$2){   
  41.             var value = $1 == '' ? ($2 == '' ? '' : $2) : $1;   
  42.             if(value.charAt(0) == '/'){   
  43.                                // 为真表示这个标签是前面最后一个为闭合标签的闭合,因此,将此标签从数组中删除。   
  44.                 if(non_match_tag.length > 0 && non_match_tag[non_match_tag.length-1] == value.substring(1)){   
  45.                     non_match_tag.pop();   
  46.                 }   
  47.             }else{   
  48.                                // 新的未闭合的标签,将其添加到数组中。   
  49.                 non_match_tag.push(value);   
  50.             }   
  51.                });   
  52.   
  53.         return modifyDisplayString(adjustedSubString, non_match_tag);   
  54.     }  
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值