我正在尝试查找网页中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"));
完成后,我将在数组中获得四个条目:前两个是我所期望的,但后两个是headingText2 = 401
headingText3 =网页的全部内容。
我做错了什么?
此外,我在结果中获得了H1标记。有没有一种方法可以告诉表达式给出H1标记中的所有内容,而不是H1标记?
谢谢,
发布于 2012-11-30 16:00:15
正如match方法的文档所示:
如果pattern是正则表达式,为了返回具有多个匹配子字符串的数组,必须在正则表达式中设置g(全局)标志:
当pattern参数是设置了g(全局)标志的正则表达式时,如果没有找到匹配项,则该方法返回一个空数组。如果模式参数是字符串或非全局正则表达式,且未找到匹配项,则此方法返回null。如果不传递任何值(或未定义的值)作为pattern参数,则该方法返回null。
问题是您没有指定全局标志,并且最多只能得到一个结果,要解决这个问题,只需将g
添加到您的正则表达式模式中。但是你不能;不能确定加载的页面会使用H1或h1,那么你也应该为忽略大小写添加i
标志,最后你需要的标志是dotall匹配换行符。修改后的正则表达式应该是这样的:
webText.match( /\<H1>(.*?)\<\/H1>/gis );
@Jason Reeves提出了很好的解决方案,然而并不是所有的超文本标记语言页面都是正确的XML文件(有效),这意味着var webText:XML = new XML(event.target.data);
会在"XML“中的任何错误上抛出错误,使得这个解决方案对你无法控制的来源不可用。
https://stackoverflow.com/questions/13636948
复制相似问题