AS3屏幕刮痧

时间:2012-11-29 23:54:54

标签: regex actionscript-3

我试图在网页的H1标签中找到所有文本。我正在使用代码:

myTextLoader.addEventListener(Event.COMPLETE, onLoaded);
function onLoaded(e:Event):void {
    webText = e.target.data;
    headingText = webText.match( /<H1>([^]*?)<\/H1>/ ); 
}

myTextLoader.load(new URLRequest("http://www.MyWebPage.com"));

当它完成后,我的数组中有四个条目: 前两个是我期望的,但接下来的两个是 headingText [2] = 401
headingText [3] = [网页的全部内容。]

我做错了什么?

此外,我在结果中获得了H1标签。有没有办法告诉表达式给我H1标签内的所有内容,没有H1标签?

谢谢,

1 个答案:

答案 0 :(得分:1)

正如匹配方法的文档所示:

  

如果pattern是正则表达式,为了返回具有多个匹配子字符串的数组,必须在正则表达式中设置g(全局)标志:

     
      
  • 如果未设置g(全局)标志,则返回数组将包含不超过一个匹配项,并且正则表达式的lastIndex属性保持不变。
  •   
  • 如果设置了g(全局)标志,则该方法在字符串的开头(索引位置0)开始搜索。如果匹配的子字符串是空字符串(可以使用正则表达式,例如/ x * /),则该方法将该空字符串添加到匹配数组中,然后继续在下一个索引位置搜索。方法完成后,正则表达式的lastIndex属性设置为0。
  •   
     

当pattern参数是设置了g(全局)标志的正则表达式时,如果未找到匹配项,则该方法返回一个空数组。如果pattern参数是String或非全局正则表达式且未找到匹配项,则该方法返回null。如果未传递任何值(或未定义的值)作为模式参数,则该方法返回null。

问题是您没有指定全局标记,并且您最多只获得一个结果,要修复它只需将g添加到正则表达式模式中。但你可以;不确定加载的页面是否会使用H1或h1然后你还应该添加i - 忽略大小写的标志和你需要的最后一个标志是dotall匹配换行符。您修改后的正则表达式应如下所示:

webText.match( /\<H1>(.*?)\<\/H1>/gis );

@Jason Reeves提出了很好的解决方案,但并非所有HTML页面都是正确的XML文件(有效),这意味着var webText:XML = new XML(event.target.data);会对“XML”中的任何错误产生错误,使得此解决方案无法用于您尚未获得的源控制。