RegEx:在一组引号之间抓取值,前面是另一对引号[重复]

问题描述 投票:-1回答:2

这个问题在这里已有答案:

我想从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中的链接?

javascript regex
2个回答
1
投票

如果我理解正确,(即所有链接都以"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?


2
投票

我认为匹配将是最好的解决方案。

data.match(/uri":"([^&]+)"/)
最新问题
© www.soinside.com 2019 - 2024. All rights reserved.