我试图在网页的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标签?
谢谢,
答案 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”中的任何错误产生错误,使得此解决方案无法用于您尚未获得的源控制。