var getAbstract=function(n){ n=(n)?parseInt(n)-1:-1;//0 - n-1的字符长度为n. var html=null; if (config.htmlOn == true) { var div=document.createElement("DIV"); div.innerHTML=Editor.editor.contentWindow.document.body.innerHTML; html=div.innerText; delete div; } else { html=Editor.editor.contentWindow.document.body.innerHTML; } html=html.replace(/<\s*script[^>]*>.*<\s*\/script[^>]*>/ig,"").replace(/<\s*script[^>]*>/ig,"").replace(/<\s*\/script[^>]*>/ig,""); if(n>0) { //匹配所有的HTML Tag var pattern='<[^>]*>'; var reg = new RegExp(pattern,'ig'); var lastIndex=n; var arr; //循环直到第n个字符在当前匹配式之间或者之前时跳出 while ((arr = reg.exec(html)) != null) { //当下一个匹配式<*>(表示为Tag)的起始位置超过n,则表示第n个字符处在当前匹配式之前 if(arr.index>=n)break; //此时两种情况,一种是第n个字符在当前匹配式之间,另一种是当前匹配式在第n个字符之前 lastIndex=arr.lastIndex; //当下一个匹配式<*>(表示为Tag)的结束位置超过n,则表示第n个字符处在当前匹配式之间 if(lastIndex>=n)break; } //为了不截断第n个字符附近的Tag,需要根据情况重新指定截断的位置 //第n个字符在循环中跳出时的匹配式之间的时候,需要将n指定到该匹配式的结束处,以免截断 if(lastIndex>n)n=lastIndex; //匹配一些不能被截断的前后都必须有的HTML TAG var tags='table|div|span|b|i|u|ul|ol|strong|embed|object|center|strike|iframe'; function recursionRegular(n) { if(n==1) { return '[^<]*((<\s*\\1[^>]*'+'.*' +'</\s*\\1[^>]*>)|(<(?!/?\s*\\1)[^>]*>[^<]*))*[^<]*'; } else { return '[^<]*((<\s*\\1[^>]*'+recursionRegular(n-1)+'</\s*\\1[^>]*>)|(<(?!/?\s*\\1)[^>]*>[^<]*))*[^<]*'; } } pattern='<\s*('+tags+')[^>]*>'+recursionRegular(4)+'</\s*\\1[^>]*>'; // pattern='<\s*(table|div|span|b|i|u|ul|ol|strong|embed|object|center|strike|iframe|button)[^>]*>[^<]*</\s*\\1[^>]*>'; reg = new RegExp(pattern,'ig'); //循环直到第n个字符在当前匹配式之间或者之前时跳出 while ((arr = reg.exec(html)) != null) { //当下一个匹配式<*>(表示为Tag)的起始位置超过n,则表示第n个字符处在当前匹配式之前 if(arr.index>=n)break; //此时两种情况,一种是第n个字符在当前匹配式之间,另一种是当前匹配式在第n个字符之前 lastIndex=arr.lastIndex; //当下一个匹配式<*>(表示为Tag)的结束位置超过n,则表示第n个字符处在当前匹配式之间 if(lastIndex>=n)break; } //为了不截断第n个字符附近的Tag,需要根据情况重新指定截断的位置 //第n个字符在循环中跳出时的匹配式之间的时候,需要将n指定到该匹配式的结束处,以免截断 if(lastIndex>n)n=lastIndex; return html.substring(0,n); } else { return html; } }