2011-03-04 22 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) + ' ...'; 

这是一个非常简单的正则表达式来去除所有标签,所以它不会对更复杂的标签(可能)的工作。

相关问题