2014-12-02 3 views
-1

Я пытаюсь использовать это, чтобы удалить все комментарии из строки.RegEx replace in ie8

str = str.replace(/<!--(.*?)-->/g, ""); 

Он отлично работает в хроме, но когда дело доходит до запуска в IE8, неожиданность неожиданность, он не удаляет часть текста.

Я заметил, что когда хром будет избавиться от комментариев, они превратятся в нечто aliong эти строки:

&lt;!--[if !supportLists]--&gt;· &lt;!--[endif]--&gt; 

Вот моя полная функция, основанная на This Link

function CleanWordHTML(str) { 
    str = str.replace(/<o:p>\s*<\/o:p>/g, ""); 
    str = str.replace(/<o:p>.*?<\/o:p>/g, "&nbsp;"); 
    str = str.replace(/\s*mso-[^:]+:[^;"]+;?/gi, ""); 
    str = str.replace(/\s*MARGIN: 0cm 0cm 0pt\s*;/gi, ""); 
    str = str.replace(/\s*MARGIN: 0cm 0cm 0pt\s*"/gi, "\""); 
    str = str.replace(/\s*TEXT-INDENT: 0cm\s*;/gi, ""); 
    str = str.replace(/\s*TEXT-INDENT: 0cm\s*"/gi, "\""); 
    str = str.replace(/\s*TEXT-ALIGN: [^\s;]+;?"/gi, "\""); 
    str = str.replace(/\s*PAGE-BREAK-BEFORE: [^\s;]+;?"/gi, "\""); 
    str = str.replace(/\s*FONT-VARIANT: [^\s;]+;?"/gi, "\""); 
    str = str.replace(/\s*tab-stops:[^;"]*;?/gi, ""); 
    str = str.replace(/\s*tab-stops:[^"]*/gi, ""); 
    str = str.replace(/\s*face="[^"]*"/gi, ""); 
    str = str.replace(/\s*face=[^ >]*/gi, ""); 
    str = str.replace(/\s*FONT-FAMILY:[^;"]*;?/gi, ""); 
    str = str.replace(/<(\w[^>]*) class=([^ |>]*)([^>]*)/gi, "<$1$3"); 
    str = str.replace(/<(\w[^>]*) style="([^\"]*)"([^>]*)/gi, "<$1$3"); 
    str = str.replace(/\s*style="\s*"/gi, ''); 
    str = str.replace(/<SPAN\s*[^>]*>\s*&nbsp;\s*<\/SPAN>/gi, '&nbsp;'); 
    str = str.replace(/<SPAN\s*[^>]*><\/SPAN>/gi, ''); 
    str = str.replace(/<(\w[^>]*) lang=([^ |>]*)([^>]*)/gi, "<$1$3"); 
    str = str.replace(/<SPAN\s*>(.*?)<\/SPAN>/gi, '$1'); 
    str = str.replace(/<FONT\s*>(.*?)<\/FONT>/gi, '$1'); 
    str = str.replace(/<\\?\?xml[^>]*>/gi, ""); 
    str = str.replace(/<\/?\w+:[^>]*>/gi, ""); 
    str = str.replace(/<H\d>\s*<\/H\d>/gi, ''); 
    str = str.replace(/<H1([^>]*)>/gi, ''); 
    str = str.replace(/<H2([^>]*)>/gi, ''); 
    str = str.replace(/<H3([^>]*)>/gi, ''); 
    str = str.replace(/<H4([^>]*)>/gi, ''); 
    str = str.replace(/<H5([^>]*)>/gi, ''); 
    str = str.replace(/<H6([^>]*)>/gi, ''); 
    str = str.replace(/<\/H\d>/gi, '<br>'); //remove this to take out breaks where Heading tags were 
    str = str.replace(/<(U|I|STRIKE)>&nbsp;<\/\1>/g, '&nbsp;'); 
    str = str.replace(/<(B|b)>&nbsp;<\/\b|B>/g, ''); 
    str = str.replace(/<([^\s>]+)[^>]*>\s*<\/\1>/g, ''); 
    str = str.replace(/<([^\s>]+)[^>]*>\s*<\/\1>/g, ''); 
    str = str.replace(/<([^\s>]+)[^>]*>\s*<\/\1>/g, ''); 
    //comments 
    str = str.replace(/<!--(.*?)-->/g, ""); 
    //spaces 
    str = str.replace(/&nbsp;/g, ''); 
    //empty tags 
    str = str.replace(/<[^\/>][^>]*><\/[^>]+>/g, ''); 


    //some RegEx code for the picky browsers 
    var re = new RegExp("(<P)([^>]*>.*?)(<\/P>)", "gi"); 
    str = str.replace(re, "<div$2</div>"); 
    var re2 = new RegExp("(<font|<FONT)([^*>]*>.*?)(<\/FONT>|<\/font>)", "gi"); 
    str = str.replace(re2, "<div$2</div>"); 
    str = str.replace(/size|SIZE = ([\d]{1})/g, ''); 

    return str; 
} 

Спасибо

+0

обязательное примечание: http://stackoverflow.com/questions/590747/using-regular-expressions-to-parse-html-why-not – epascarello

+0

@epascarello независимо от того, не должен ли быть способ захватить starvator

+1

Вы пробовали '<! - (. *?) - >'? Возможно, я ушел, но я подозреваю, что IE8 может удалять комментарии HTML до разбора текста сценария. (т. е. он считывает его как «', а затем запускает промежуточные секции '...'). Опять же, это, похоже, превратит ваше регулярное выражение в комментарий '//' JS, поэтому я, вероятно, ошибаюсь. – apsillers

ответ

0

Как упоминалось в комментариях к apsillers, я могу просто использовать это:

str = str.replace(/&lt;!--(.*?)--&gt;/g, "");