首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >AS3屏幕抓取

AS3屏幕抓取
EN

Stack Overflow用户
提问于 2012-11-30 07:54:54
回答 1查看 249关注 0票数 0

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

代码语言:javascript
运行
复制
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"));

完成后,我将在数组中获得四个条目:前两个是我所期望的,但后两个是headingText2 = 401

headingText3 =网页的全部内容。

我做错了什么?

此外,我在结果中获得了H1标记。有没有一种方法可以告诉表达式给出H1标记中的所有内容,而不是H1标记?

谢谢,

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2012-11-30 16:00:15

正如match方法的文档所示:

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

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

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

问题是您没有指定全局标志,并且最多只能得到一个结果,要解决这个问题,只需将g添加到您的正则表达式模式中。但是你不能;不能确定加载的页面会使用H1或h1,那么你也应该为忽略大小写添加i标志,最后你需要的标志是dotall匹配换行符。修改后的正则表达式应该是这样的:

代码语言:javascript
运行
复制
webText.match( /\<H1>(.*?)\<\/H1>/gis );

@Jason Reeves提出了很好的解决方案,然而并不是所有的超文本标记语言页面都是正确的XML文件(有效),这意味着var webText:XML = new XML(event.target.data);会在"XML“中的任何错误上抛出错误,使得这个解决方案对你无法控制的来源不可用。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13636948

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档