| 580 | |
| 581 | //去除冗余属性和标签 |
| 582 | function filterPasteWord(str) { |
| 583 | str = str.replace(/[\t\r]+/g, ' ').replace(/<!--[\s\S]*?-->/ig, "") |
| 584 | //转换图片 |
| 585 | .replace(/<v:shape [^>]*>[\s\S]*?.<\/v:shape>/gi, |
| 586 | function (str) { |
| 587 | //opera能自己解析出image所这里直接返回空 |
| 588 | if (!!window.opera && window.opera.version) { |
| 589 | return ''; |
| 590 | } |
| 591 | try { |
| 592 | //有可能是bitmap占为图,无用,直接过滤掉,主要体现在粘贴excel表格中 |
| 593 | if (/Bitmap/i.test(str)) { |
| 594 | return ''; |
| 595 | } |
| 596 | var src = str.match(/src=\s*"([^"]*)"/i)[1]; |
| 597 | return '<img src="' + src + '" />'; |
| 598 | } catch (e) { |
| 599 | return ''; |
| 600 | } |
| 601 | }) |
| 602 | |
| 603 | //针对wps添加的多余标签处理 |
| 604 | .replace(/<\/?div[^>]*>/g, '') |
| 605 | .replace(/<\/?span[^>]*>/g, '') |
| 606 | .replace(/<\/?font[^>]*>/g, '') |
| 607 | .replace(/<\/?col[^>]*>/g, '') |
| 608 | .replace(/<\/?(span|div|o:p|v:.*?|input|label)[\s\S]*?>/g, '') |
| 609 | //去掉所有属性,需要保留单元格合并 |
| 610 | //.replace(/<([a-zA-Z]+)\s*[^><]*>/g, "<$1>") |
| 611 | //去掉多余的属性 |
| 612 | .replace(/v:\w+=(["']?)[^'"]+\1/g, '') |
| 613 | .replace(/<(!|script[^>]*>.*?<\/script(?=[>\s])|\/?(\?xml(:\w+)?|xml|meta|link|style|\w+:\w+)(?=[\s\/>]))[^>]*>/gi, "").replace(/<p [^>]*class="?MsoHeading"?[^>]*>(.*?)<\/p>/gi, "<p><strong>$1</strong></p>") |
| 614 | //去掉多余的属性 |
| 615 | .replace(/\s+(class|lang|align)\s*=\s*(['"]?)([\w-]+)\2/gi, '') |
| 616 | //清除多余的font/span不能匹配 有可能是空格 |
| 617 | .replace(/<(font|span)[^>]*>(\s*)<\/\1>/gi, |
| 618 | function (a, b, c) { |
| 619 | return c.replace(/[\t\r\n ]+/g, " "); |
| 620 | }) |
| 621 | //去掉style属性 |
| 622 | .replace(/(<[a-z][^>]*)\sstyle=(["'])([^\2]*?)\2/gi, "$1") |
| 623 | // 去除不带引号的属性 |
| 624 | .replace(/(border|cellspacing|MsoNormalTable|valign|width|center| |x:str|height|x:num|cellpadding)(=[^ \f\n\r\t\v>]*)?/g, "") |
| 625 | //保留code代码块的language |
| 626 | .replace(/class=[\"|'](.*?)[\"|'].*?/g, function (p, p1) { |
| 627 | if (/language-(\S+)/.test(p1)) { |
| 628 | return p; |
| 629 | } else { |
| 630 | return ""; |
| 631 | } |
| 632 | }) |
| 633 | // 去除多余空格 |
| 634 | .replace(/(\S+)([ \t\r]+)/g, function (match, p1, p2) { |
| 635 | return p1 + ' '; |
| 636 | }) |
| 637 | .replace(/(\s)(>|<)/g, function (match, p1, p2) { |
| 638 | return p2; |
| 639 | }); |