使用正则表达式检查数组条目

Check Array Entries with Regex

我有一个包含一个或多个条目的数组。每个都是一个字符串(List of urls in open Tabs via Firefox SDK)。我想检查特定的 url 是否已经在某些选项卡中打开(到目前为止没有什么特别的)。

我的问题是,选项卡列表中的 url 可以有四个不同的四个。例如:

Url我要在tablist中查找:

https://cmsr-author.de/cf#/content/test/de.html

但是 url 也可以是这样的:

https://cmsr-author.de/content/test/de.html
https://cmsr-author.de/test/de.html
https://cmsr-author.de/cf#/test/de.html

当然 url 的最后一部分(在 /test/... 之后)总是有些不同。如果我无法在选项卡列表中找到四个 url 之一,我想调用其他操作。

到目前为止,我的解决方案是构建一些 if-chain:

if (res !== url1) {
  if (res !== url2) {
    if ...

但我认为必须有一些更优雅的方式。也许通过正则表达式?我已经用四种形式捕获了第一部分(保持不变 https://cmsr-author.ws..。)。但我可能不知道如何实现这个。

如果你想使用正则表达式,你可以通过在中间部分使用组来实现,这里有详细的解释:http://www.regular-expressions.info/refcapture.html

实际上,您的正则表达式看起来像这样:

https:\/\/cmsr-author\.de\/(content|...|...)\/de\.html

其中...必须替换为 url 不同的中间部分。 请注意"or" 用于在组内提供多种可能性。字符 / 和 .必须转义,因为它们在正则表达式中具有特殊作用。

希望对您有所帮助!

var urls = ["https://cmsr-author.de/content/test/de.html","https://cmsr-author.de/test/de.html","https://cmsr-author.de/cf#/test/de.html"]
var filtered = urls.filter(function(url) 
{ 
       return url.indexOf("cf#") > -1 && url.endsWith("/test/de.html")
})

var contains = filtered.length > 0
console.log(contains)

我的英文不好,没有完全理解你的意思,按照我的想法,你应该需要一个正则表达式,才匹配first.If我错了, 请@我。

希望对您有所帮助!

var reg = /^https:\/\/cmsr\-author\.de\/cf#\/(?:\w+\/)+test\/de\.html$/gi;
var str1 = "https://cmsr-author.de/cf#/content/test/de.html";
var str2 = "https://cmsr-author.de/content/test/de.html";
var str3 = "https://cmsr-author.de/test/de.html";
var str4 = "https://cmsr-author.de/cf#/test/de.html";
console.log(reg.test(str1));
console.log(reg.test(str2));
console.log(reg.test(str3));
console.log(reg.test(str4));