RegEx:一组引号之间的抢占值,其后是另一对引号

时间:2018-10-15 06:30:11

标签: javascript regex

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

2 个答案:

答案 0 :(得分:2)

我认为比赛将是最好的解决方案。

import akka.util.ByteString;
import play.libs.streams.Accumulator;
import play.mvc.EssentialAction;
import play.mvc.EssentialFilter;
import play.mvc.Result;
import javax.inject.Inject;
import java.util.concurrent.Executor;

public class Filters2 extends EssentialFilter {

    private final Executor executor;

    @Inject
    public Filters2(Executor executor) {
        super();
        this.executor = executor;
    }

    @Override
    public EssentialAction apply(EssentialAction next) {
        return EssentialAction.of(request -> {
            request.headers().put("Strict-Transport-Security", new String[]{"max-age=31536000; includeSubDomains"});
            Accumulator<ByteString, Result> accumulator = next.apply(request);
            return accumulator.map(result -> result, executor);
        });
    }
}

答案 1 :(得分:1)

如果我对您的理解正确(也就是说,所有链接均以"uri":开头),则可能要尝试使用的正则表达式是:

(?<=\"uri\":)\"([\w\/\-.]*)\"

让我们分解一下:

  • (?<=\"uri\":)-此部分确保在我们要查找的文本之前,出现"uri":文本。它称为向后查找,并且以与^$字符相同的方式工作。
  • \"([\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?