- /*
- * 调整截取的字符串的位置。因为在截取一个字符串后可能存在两种情况:
- * (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);
- }
js截取字符串
最新推荐文章于 2024-02-23 15:30:54 发布