正则表达式:即使存在多个相同的匹配项,如何也仅返回一个匹配项?

时间:2019-01-26 01:17:42

标签: javascript regex

我正在尝试从网页获取链接,但是同一链接可能多次出现。
因为我对获取所有链接感兴趣,所以我使用match()函数,该函数两次(或多次,取决于页面上有多少个相同的链接)返回相同的链接。

示例:

const results = [
    'http://example1.com','http://example1.com', 'http://example2.com','http://example2.com',
];

一种解决方案是将匹配数组传递给Set()

const expected = [... new Set(results)];
expected // ["http://example1.com", "http://example2.com"]

是否有另一种无需使用Set()(最好仍使用正则表达式)来获得预期结果的方法?

所以主要的问题不是从数组中删除重复项,而是从正则表达式中获得不同的值。

Here is some context

在此示例之后,结果由4个项目组成的数组,即2个重复项。

预期结果将是 distinct 链接的数组。在这种情况下,将包含2个项目。

1 个答案:

答案 0 :(得分:2)

您可以尝试通过前瞻性断言仅获取最后一个匹配项:

/(https:\/\/\S+\/[a-z-0-9\?=]+-+\d+-+)(?!.*\1)/gs