2011-03-04 20 views
0

我有一個字符串變量以HTML格式指定了一些內容。 有些事情是這樣的var strLabel:String = "This is <b>Test</b>;如何從具有HTML標記的字符串變量中獲取子字符串

但是在運行時,我得到了字符串的前10個字符,並將其顯示在另一個控件中。 對於這一點,有什麼做的是

txtLabelName.Text = String(strLabel).substr(0,10) + ' ...'; 

但在輸出我收到的This is <b。基本上它將HTML相關標籤也視爲文本。但是我的代碼在計算子字符串時必須省略HTML標籤。

請有人幫我做到這一點?

回答

0

我從一些博客得到了這段代碼。這是行之有效的

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; 
    } 
2

使用這個正則表達式剝離(或多或少)HTML標籤:

txtLabelName.text = strLabel.replace(/\<.+?\>/g, '').substr(0, 10) + ' ...'; 

這是一個非常簡單的正則表達式來去除所有標籤,所以它不會對更復雜的標籤(可能)的工作。

相關問題