2010-02-17 75 views
1

首先,我的小白不客氣。當我說我是rtfm'ing時相信我。我不懶惰,我只是愚蠢的(顯然)。在光明的一面,這可以在這裏獲得一些簡單點。簡單的語法問題

我試圖做一個匹配/與包含特殊字符的模式取代,並運行到語法錯誤在Flex 3的應用程序。我只是想下面的正則表達式編譯......(同時也與「」替換HTML標籤)

value.replace(/</?\w+((\s+\w+(\s*=\s*(?:".*?"|'.*?'|[^'">\s]+))?)+\s*|\s*)/?>/g, ""); 

在一個側面說明,模式/ <。*?>/G不會在情況下工作那裏有HTML實體標記之間, 像這樣:

<TEXTFORMAT LEADING="2"> 
<P ALIGN="LEFT"> 
<FONT FACE="Arial" SIZE="11" COLOR="#4F4A4A" LETTERSPACING="0" KERNING="0"><one</FONT> 
</P> 
</TEXTFORMAT><TEXTFORMAT LEADING="2"> 
<P ALIGN="LEFT"> 
<FONT FACE="Arial" SIZE="11" COLOR="#4F4A4A" LETTERSPACING="0" KERNING="0">two</FONT> 
</P> 
</TEXTFORMAT> 

第一個正則表達式將同時獲得"<one" and "two",但第二隻得到「喜」

謝謝! Stabby大號

+0

看起來像SO語法熒光筆爲你解決了它 - 你應該在正則表達式中跳過正斜槓;否則正斜槓被認爲是結束分隔符。另外,當標籤中有HTML實體時,我看不到'/ <.*?>/g'會失敗。 –

回答

1

這裏是你在找什麼:

// strips htmltags 
// @param html - string to parse 
// @param tags - tags to ignore 
public static function stripHtmlTags(html:String, tags:String = ""):String 
{ 
    var tagsToBeKept:Array = new Array(); 
    if (tags.length > 0) 
     tagsToBeKept = tags.split(new RegExp("\\s*,\\s*")); 

    var tagsToKeep:Array = new Array(); 
    for (var i:int = 0; i < tagsToBeKept.length; i++) 
    { 
     if (tagsToBeKept[i] != null && tagsToBeKept[i] != "") 
      tagsToKeep.push(tagsToBeKept[i]); 
    } 

    var toBeRemoved:Array = new Array(); 
    var tagRegExp:RegExp = new RegExp("<([^>\\s]+)(\\s[^>]+)*>", "g"); 

    var foundedStrings:Array = html.match(tagRegExp); 
    for (i = 0; i < foundedStrings.length; i++) 
    { 
     var tagFlag:Boolean = false; 
     if (tagsToKeep != null) 
     { 
      for (var j:int = 0; j < tagsToKeep.length; j++) 
      { 
       var tmpRegExp:RegExp = new RegExp("<\/?" + tagsToKeep[j] + " ?/?>", "i"); 
       var tmpStr:String = foundedStrings[i] as String; 
       if (tmpStr.search(tmpRegExp) != -1) 
        tagFlag = true; 
      } 
     } 
     if (!tagFlag) 
      toBeRemoved.push(foundedStrings[i]); 
    } 
    for (i = 0; i < toBeRemoved.length; i++) 
    { 
     var tmpRE:RegExp = new RegExp("([\+\*\$\/])","g"); 
     var tmpRemRE:RegExp = new RegExp((toBeRemoved[i] as String).replace(tmpRE, "\\$1"),"g"); 
     html = html.replace(tmpRemRE, ""); 
    } 
    return html; 
} 

看到http://fightskillz.com/2010/01/flexactionscript-3-0-strip-html-tags-function/以獲取更多信息。