0

继我之前发表的一篇文章之后,我在我需要的方面取得了进展,但对 RegEx 表达式的工作原理知之甚少,我被困住了!

这一行:

FilesM = Regex.Matches(StrFile, "<link.*?href=""(.*?)"".*? />")

正在从我的页面的 HTML 中提取所有<link..元素以编译一个组合style文件。

但是,我需要排除任何media="print"链接。

我也在尝试结合 JS 脚本

FilesM1 = Regex.Matches(StrFile, "<script.*?src=""(.*?)"".*?></script>")

这样做,但在这种情况下,我想排除任何不在本地托管的脚本。我想通过排除href以“http”开头的任何脚本来做到这一点

那么如何从匹配集合中排除这两种情况呢?

4

1 回答 1

1

我知道这不是您正在寻找的,但是,如果您有兴趣,这里有一个示例,说明如何使用 XPath 找到您关心的元素:

Dim doc As New XmlDocument()
doc.LoadXml(html)
Dim linkNodes As XmlNodeList = doc.SelectNodes("descendant-or-self::link[(@href) and (not(@media) or (@media != 'print'))]")
Dim scriptNodes As XmlNodeList = doc.SelectNodes("descendant-or-self::script[(@src) and (not(starts-with(@src,'http')))]")

XmlDocument.SelectNodes方法返回与给定 XPath 匹配的所有元素。

在 XPath 字符串中,descendant-or-self::意味着您希望它搜索从当前位置(根)到所有后代的所有元素以查找以下元素名称。如果忽略它,它只会在当前(根)级别查找匹配的元素。

[]条款提供条件。因此,例如,link[@media != 'print']将匹配所有不具有等于“打印”的媒体属性的链接元素。@ 符号指定属性名称。

简单地在条件中单独列出属性名称意味着您正在检查该属性是否存在。例如,link[@href]匹配所有具有href属性的链接元素。

于 2012-06-15T13:00:10.233 回答