js截取字符串

xiaoxiao2026-01-02  4

/*             * 调整截取的字符串的位置。因为在截取一个字符串后可能存在两种情况:          * (1)字符串末位正好处于一个标签的属性之中的某个位置。如:<<SPAN style="COLOR: #ff0000">a id="xxx"  href="xxx"</SPAN>  ></a>中红色标注的位置。          * (2)字符串末位处于一个标签内容之中的某个位置。如:<<SPAN style="COLOR: #000000">a</SPAN>  ><SPAN style="COLOR: #ff0000">here</SPAN>  </a> 中红色标注的位置。          *  对于这两种情况,第二种情况可以无需特殊处理,但是第一种情况的话得将整个标签删除或者将其属性补全。删除的话          *  将字符串的末尾位置前移至标签开始之前;而补全则是将末尾位置后移至次标签的'>'处。这里采用的是删除的方法。          */       function adjustByTagPostion(str){            var left_brace_index = str.lastIndexOf('<');            var right_brace_index = str.lastIndexOf('>');            // 为true的话则表示字符串处于第一种情况,需要进行删除操作。                   var inTagDefinition = left_brace_index > right_brace_index;            return inTagDefinition ? str.substring(0,left_brace_index) : str;        }          // 将未闭合的标签按序闭合。        function modifyDisplayString(original, addTags){            var tagLenth = addTags.length;            for(var i = tagLenth-1; i >= 0; i--){                original += '</' + addTags[i] + '>';            }            return original;        }          //         function splitString(original, length){                   // 此数组用于保存那些未闭合的标签。            var non_match_tag = []                   // 如果大于字符串的总长度,返回整个字符串;否则返回指定长度的子串            var to = length >= original.length ? original.length : length;            var substring = original.substring(0,to);                      // 调整字符串。            adjustedSubString = adjustByTagPostion(substring);            var tag_pattern = /<\s*(\w+\b)(?:[^>]*[^\/])?>|<(\/\w+)>/ig               adjustedSubString.replace(tag_pattern, function(match,$1,$2){                var value = $1 == '' ? ($2 == '' ? '' : $2) : $1;                if(value.charAt(0) == '/'){                                   // 为真表示这个标签是前面最后一个为闭合标签的闭合,因此,将此标签从数组中删除。                    if(non_match_tag.length > 0 && non_match_tag[non_match_tag.length-1] == value.substring(1)){                        non_match_tag.pop();                   }                }else{                                   // 新的未闭合的标签,将其添加到数组中。                    non_match_tag.push(value);               }                  });              return modifyDisplayString(adjustedSubString, non_match_tag);        }  
转载请注明原文地址: https://www.6miu.com/read-5041944.html

最新回复(0)