首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >快速检查两个正则表达式是否共享匹配

问快速检查两个正则表达式是否共享匹配
EN

Stack Overflow用户
提问于 2017-06-29 04:07:46
回答 1查看 367关注 0票数 0

假设我有一个正则表达式列表,这些表达式匹配文件:

代码语言:javascript
复制
{
   "list":[
      "^/foo/bar/baz/x",
      "^/foo/bar/baz/y"
      "^/foo/mon/choo$",
      ...
      "^/foo/.*"
   ]
}

请注意,在运行时,这将发生:

代码语言:javascript
复制
let regexes = list.map(function(l){
       return new RegExp(l);
});

我需要创建一个例程来快速检查两个或多个正则表达式是否匹配相同的输入。

有没有一种快速检查一个虚构/潜在文件路径是否与列表中的多个正则表达式匹配的方法?

例如,正则表达式/foo/.*将匹配前3项,因此在我的程序中表示错误。

用例:用户需要创建一个正则表达式列表,但是它们必须是不共享任何匹配的独占正则表达式。

我可以用实际的输入来检查这一点,但我想知道是否也有一种方法可以用理论上的输入来检验这一点。(我希望后者能更快些)。

的“硬”方式:,我有一个文件列表。对于每个文件,我检查它是否与列表中的任何正则表达式相匹配。如果它与列表中的1以上匹配,我将抛出一个错误。

困难的方法的问题是,在使用任何实际的输入数据之前,我想验证列表。

EN

回答 1

Stack Overflow用户

发布于 2017-06-29 04:27:44

由于您使用的是数组,所以可能会有精确正则表达式的副本,所以您可能希望使用带键的对象,或者只是设置它。

同时,您也可以使用正则表达式来测试彼此。在下面的示例中,我只检查.*或.+,但是如果您真的想要更全面,可以针对其他正则表达式运行每个正则表达式。虽然我没有这样做,因为它可能有一个非常长的运行时间,但这取决于你。

​

代码语言:javascript
复制
var list = [
  "/foo/bar/baz/x",
  "/foo/bar/baz/y",
  "/foo/mon/choo$",
  "/foo/.*"
];

var error_list = [...list, "/foo/mon/choo$"];
let set = new Set(error_list);

console.log(set.length === list.length, "\"if false it means there's duplicates\"");

var regexes = [];

for (var regex of list){
  if (regex.match(/\.(\*|\+)/)){
    regexes.push(regex);
  }
}

loop:
for (var regex of regexes){
  var r = new RegExp("^"+regex);
  for (let test of list){
    if (test.match(r) && regex !== test){
      console.log(test, "this matched");
      // break loop;
    }
  }
}

​

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/44816194

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档