Discuz!官方免费开源建站系统

 找回密码
 立即注册

QQ登录

只需一步,快速开始

搜索

[疑问] 写出了完美清除冗余的word垃圾代码的正则

[复制链接]
hoiuan 发表于 2010-4-1 23:58:27 | 显示全部楼层 |阅读模式
本帖最后由 hoiuan 于 2010-4-2 00:01 编辑

用以下函数替代edit.js里的原有函数即可!
由于不懂正则,琢磨了4小时左右才在fckediter的基础上完成
清除了所有冗余代码,保全了90%以上的格式!


希望高人能做个自动检测粘贴进编辑器里的内容是否为word格式的功能出来,这样自动调用此函数进行清理就完美了!
  1.         function CleanCode() {
  2.                 var oRTE = getFrameNode(sRTE);
  3.                 oRTE.focus();
  4.                 if (! window.Event){
  5.                         var body = oRTE.document.body;
  6.                         var html = oRTE.document.body.innerHTML;
  7.         html = html.replace(/<o:p>\s*<\/o:p>/g, '') ;
  8.         html = html.replace(/<o:p>[\s\S]*?<\/o:p>/g, '&nbsp;') ;
  9.         html = html.replace( /\s*mso-[^:]+:[^;"]+;?/gi, '' ) ;
  10.         html = html.replace( /\s*MARGIN: 0(?:cm|in) 0(?:cm|in) 0pt\s*;/gi, '' ) ;
  11.         html = html.replace( /\s*MARGIN: 0(?:cm|in) 0(?:cm|in) 0pt\s*"/gi, """ ) ;
  12.         html = html.replace( /\s*TEXT-INDENT: 0(?:cm|in)\s*;/gi, '' ) ;
  13.         html = html.replace( /\s*TEXT-INDENT: 0(?:cm|in)\s*"/gi, """ ) ;
  14.         html = html.replace( /\s*TEXT-ALIGN: [^\s;]+;?"/gi, """ ) ;
  15.         html = html.replace( /\s*PAGE-BREAK-BEFORE: [^\s;]+;?"/gi, """ ) ;
  16.         html = html.replace( /\s*FONT-VARIANT: [^\s;]+;?"/gi, """ ) ;
  17.         html = html.replace( /\s*tab-stops:[^;"]*;?/gi, '' ) ;
  18.         html = html.replace( /\s*tab-stops:[^"]*/gi, '' ) ;
  19.         html = html.replace( /\s*face="[^"]*"/gi, '' ) ;
  20.         html = html.replace( /\s*face=[^ >]*/gi, '' ) ;
  21.         html = html.replace( /\s*FONT-FAMILY:[^;"]*;?/gi, '' ) ;
  22.         html = html.replace(/<(\w[^>]*) class=([^ |>]*)([^>]*)/gi, "<$1$3") ;
  23.         html = html.replace( /<(\w[^>]*)LINE-HEIGHT:\s+\d+%;([^>]*)/gi, "<$1$2" ) ;
  24.         html = html.replace( /<(\w[^>]*)VERTICAL-ALIGN:(\s+[A-Za-z]+)([^>]*)/gi, "<$1$3" ) ;
  25.         html = html.replace( /<STYLE[^>]*>[\s\S]*?<\/STYLE[^>]*>/gi, '' ) ;
  26.         html = html.replace( /<(?:META|LINK)[^>]*>\s*/gi, '' ) ;
  27.         html =  html.replace( /\s*style="\s*"/gi, '' ) ;
  28.         html = html.replace( /<SPAN\s*[^>]*>\s*&nbsp;\s*<\/SPAN>/gi, '&nbsp;' ) ;
  29.         html = html.replace( /<SPAN\s*[^>]*><\/SPAN>/gi, '' ) ;
  30.         html = html.replace(/<(\w[^>]*) lang=([^ |>]*)([^>]*)/gi, "<$1$3") ;
  31.         html = html.replace( /<SPAN\s*>([\s\S]*?)<\/SPAN>/gi, '$1' ) ;
  32.         html = html.replace( /<FONT\s*>([\s\S]*?)<\/FONT>/gi, '$1' ) ;
  33.         html = html.replace(/<\\?\?xml[^>]*>/gi, '' ) ;
  34.         html = html.replace( /<w:[^>]*>[\s\S]*?<\/w:[^>]*>/gi, '' ) ;
  35.         html = html.replace(/<\/?\w+:[^>]*>/gi, '' ) ;
  36.         html = html.replace(/<\!--[\s\S]*?-->/g, '' ) ;
  37.         html = html.replace( /<(U|I|STRIKE)>&nbsp;<\/\1>/g, '&nbsp;' ) ;
  38.         html = html.replace( /<H\d>\s*<\/H\d>/gi, '' ) ;
  39.         html = html.replace( /<(\w+)[^>]*\sstyle="[^"]*DISPLAY\s?:\s?none[\s\S]*?<\/\1>/ig, '' ) ;
  40.         html = html.replace( /<(\w[^>]*) language=([^ |>]*)([^>]*)/gi, "<$1$3") ;
  41.         html = html.replace( /<(\w[^>]*) onmouseover="([^"]*)"([^>]*)/gi, "<$1$3") ;
  42.         html = html.replace( /<(\w[^>]*) onmouseout="([^"]*)"([^>]*)/gi, "<$1$3") ;
  43.         html = html.replace( /<H1([^>]*)>/gi, '<div$1><b><font size="6">' ) ;
  44.         html = html.replace( /<H2([^>]*)>/gi, '<div$1><b><font size="5">' ) ;
  45.         html = html.replace( /<H3([^>]*)>/gi, '<div$1><b><font size="4">' ) ;
  46.         html = html.replace( /<H4([^>]*)>/gi, '<div$1><b><font size="3">' ) ;
  47.         html = html.replace( /<H5([^>]*)>/gi, '<div$1><b><font size="2">' ) ;
  48.         html = html.replace( /<H6([^>]*)>/gi, '<div$1><b><font size="1">' ) ;
  49.         html = html.replace( /<\/H\d>/gi, '<\/font><\/b><\/div>' ) ;
  50.         var re = new RegExp( '(<P)([^>]*>[\\s\\S]*?)(<\/P>)', 'gi' ) ;       
  51.         html = html.replace( re, '<div$2<\/div>' ) ;
  52.         html = html.replace( /<([^\s>]+)(\s[^>]*)?>\s*<\/\1>/g, '' ) ;
  53.         html = html.replace( /<([^\s>]+)(\s[^>]*)?>\s*<\/\1>/g, '' ) ;
  54.         html = html.replace( /<([^\s>]+)(\s[^>]*)?>\s*<\/\1>/g, '' ) ;
  55.         html=html.replace(/<(table)>/gi,"<$1 border=1>");
  56.         oRTE.document.body.innerHTML = html;

  57.                        
  58.                 }else{
  59.                         var oMozText = oRTE.document.body.ownerDocument.createRange();
  60.                         oMozText.selectNodeContents(oRTE.document.body);
  61.                         oRTE.document.body.innerHTML = oMozText.toString();

  62.                 }
  63.         }
复制代码
lidq.jingwu 发表于 2010-4-2 09:38:46 | 显示全部楼层
回复 1# hoiuan


    这个正则好长哦,似乎在那里见到过的。
回复

使用道具 举报

 楼主| hoiuan 发表于 2010-4-2 10:16:39 | 显示全部楼层
回复 2# lidq.jingwu


    这个的主体代码是从fckedit编辑器里提取出来的。论坛之前有人自己写过一个很长的,不过把一些必要的格式代码也精简掉了。
上面这个正则会保留对齐、缩进、字号、颜色代码,所以完美呵呵
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

手机版|小黑屋|Discuz! 官方站 ( 皖ICP备16010102号 )star

GMT+8, 2024-11-17 13:57 , Processed in 0.026633 second(s), 3 queries , Gzip On, Redis On.

Powered by Discuz! X3.4

Copyright © 2001-2023, Tencent Cloud.

快速回复 返回顶部 返回列表