在 JavaScript 中,除了 URL 之外,是不是有类似 glob 的东西?

Posted

技术标签:

【中文标题】在 JavaScript 中,除了 URL 之外,是不是有类似 glob 的东西?【英文标题】:Is there something like glob but for URLs, in JavaScript?在 JavaScript 中,除了 URL 之外,是否有类似 glob 的东西? 【发布时间】:2014-08-24 20:34:22 【问题描述】:

我需要将 URL 与字符串模式进行匹配,但我想避免使用 RegExp 以保持模式简单易读。

我希望能够拥有像 http://*.example.org/* 这样的模式,它应该相当于 RegExp 中的 /^http:\/\/.*\.example.org\/.*$/。该 RegExp 还应该说明我为什么要使其更具可读性。

基本上,我想要适用于 URL 的类似 glob 的模式。问题是:正常的 glob 实现将 / 视为分隔符。这意味着,http://foo.example.org/bar/bla 与我的简单模式不匹配。

因此,可以忽略斜杠的 glob 实现会很棒。有没有这样的东西或者类似的东西?

【问题讨论】:

也许以下通配符库之一会有所帮助:github.com/sindresorhus/matchergithub.com/AlexKamaev/match-url-wildcardgithub.com/gamache/fuzzyurl.js 【参考方案1】:

您可以从这样的函数开始,以实现类似 glob 的行为:

function glob(pattern, input) 
    var re = new RegExp(pattern.replace(/([.?+^$[\]\\()|\/-])/g, "\\$1").replace(/\*/g, '.*'));
    return re.test(input);

然后称它为:

glob('http://*.example.org/*', 'http://foo.example.org/bar/bla');
true

【讨论】:

谢谢,如果我必须自己实现它,这可能是我必须开始的。不过,我更喜欢已经这样做的库。 我还想避免使用正则表达式,因为在 javascript 的 RegExp 中正确处理转义是一场噩梦(如果不是不可能的话)。 澄清一下,如果有人偶然发现这一点:处理转义字符是可能的,但在某些正则表达式实现中仍然非常复杂并且不是真正“正确”。 JavaScript RegExp 根本无法做到这一点,因为缺少“消极的后视”。 嗨,我想我参加聚会有点晚了。想知道您最终是自己编写代码还是找到了可靠的库。 npmjs.com/package/calmcard 现在已被弃用,而且看起来它并没有被很多人使用 @mikey 如果有人能找到它的 JS 实现,以下应该是合适的:developer.chrome.com/extensions/match_patterns【参考方案2】:

通过为它编写一个库解决了这个问题:

https://github.com/lnwdr/calmcard

这匹配带有简单通配符的任意字符串。

【讨论】:

+1 为编写这个库所做的巨大努力。希望在其中看到更多 glob 功能。 我很高兴听到有关功能请求的信息。请在 Github 上打开问题进行讨论。 链接怎么了?

以上是关于在 JavaScript 中,除了 URL 之外,是不是有类似 glob 的东西?的主要内容,如果未能解决你的问题,请参考以下文章

除了烧瓶应用程序的 url 之外,Flask 会话在另一个 url 中不起作用

在JavaScript中从头开始创建空URL对象

nginx 重写:除了空的基本 url 之外的所有内容

如何在 JavaScript 中删除查询字符串参数?

除了给定字符串之外,匹配任何内容的 JavaScript 模式是啥? [复制]

除了数据 url 之外,如何让伪元素上的剪辑路径 SVG 在 IE11/Edge 中工作?