这个问题在这里已有答案:
我想从cnn的网站收集所有新闻链接。使用chrome访问它可以防止页面的不同视图,即使用一些前端框架但使用NodeJS编译的html文件,如果我访问cnn.com然后它显示未编译的html文件,它没有任何链接标记但是有一个JavaScript带有“uri”作为键并且链接作为值的链接的数组。
未编译的html文件是here。
我正在解析这个html文件,其中有几个出现的术语“uri”,后跟引号中的链接,如:
"uri":"/2018/10/14/politics/trump-60-minutes-interview/index.html"
我希望在此模式中出现的页面上显示所有此类链接。什么正则表达式将返回JavaScript中的链接?
如果我理解正确,(即所有链接都以"uri":
开头),您可能想要尝试使用的正则表达式如下:
(?<=\"uri\":)\"([\w\/\-.]*)\"
让我们分解一下:
(?<=\"uri\":)
- 这部分确保在我们正在寻找的文本之前有"uri":
文本的出现。它被称为lookbehind,其工作方式与^
和$
字符相同。\"([\w\/\-.]*)\"
- 匹配包含URL的引号的实际内容有关此正则表达式的详细信息,请访问下面链接的Regex101演示,并在页面右侧查找说明。
要在不包含"
字符的情况下访问提取的文本,您需要访问存储在RegExp.exec()
生成的匹配对象中的第一个捕获组。你可以这样做:
var myString = '"uri":"/2018/10/14/politics/trump-60-minutes-interview/index.html"';
var myRegexp = /(?<=\"uri\":)\"([\w\/\-.]*)\"/g;
var match = myRegexp.exec(myString);
console.log(match[1]); // prints: /2018/10/14/politics/trump-60-minutes-interview/index.html
如果您有其他问题或在此处添加评论,请查看我在下面链接的问题。另外,考虑到@CertainPerformance提到的内容 - 所有版本的JS可能都不支持lookbehinds。
资源: Regex101 Demo SO - How do you access the matched groups in a JavaScript regular expression?
我认为匹配将是最好的解决方案。
data.match(/uri":"([^&]+)"/)