【问题标题】:Javascript node.js regex url matchingJavascript node.js 正则表达式 url 匹配
【发布时间】:2021-08-20 10:24:27
【问题描述】:

我已经输入了一个 URL,我正在尝试查看它是否以以下任何 URL 开头:

"https://open.spotify.com/playlist/",
"https://www.youtube.com/watch",
"https://youtu.be/",
"https://open.spotify.com/track/",
"https://youtube.com/playlist",

所以如果我输入“https://open.spotify.com/track/1vrd6UOGamcKNGnSHJQlSt?si=61680eaef0ac419e”它应该如何工作,它会返回它匹配“https://open.spotify.com/跟踪/”。

如果我输入“https://youtu.be/5qap5aO4i9A”,它将返回“https://youtu.be/”。

目前为止

url.match(/^https?:\/\/(www.youtube.com|youtube.com)\/playlist(.*)$/)
url.match(/^(https?:\/\/)?(www\.)?(m\.)?(youtube\.com|youtu\.?be)\/.+$/gi)

但这并没有让我走上正确的道路,我非常迷茫。谢谢!

【问题讨论】:

    标签: javascript node.js regex url


    【解决方案1】:

    您不应将正则表达式用于您正在使用的目的。由于您拥有必须匹配的所有网址列表。您只需检查您收到的网址即可。

    const list = ["https://open.spotify.com/playlist/",
      "https://www.youtube.com/watch",
      "https://youtu.be/",
      "https://open.spotify.com/track/",
      "https://youtube.com/playlist",
    ];
    
    function getMeMatchedURL(url) {
      const matchedURL = list.filter(item => {
        return url.substring(0, item.length) === item;
      });
      console.log(matchedURL);
    }
    
    getMeMatchedURL("https://open.spotify.com/track/1vrd6UOGamcKNGnSHJQlSt?si=61680eaef0ac419e");
    
    getMeMatchedURL("https://youtu.be/5qap5aO4i9A");
    
    

    从这里你会得到它匹配的 url,如果它返回空数组,那么它不匹配任何列表。

    【讨论】:

      【解决方案2】:

      由于您需要获取匹配的特定前缀,因此使用startsWith 进行检查可能比使用正则表达式更简单:

      const prefixes = [
          "https://open.spotify.com/playlist/",
          "https://www.youtube.com/watch",
          "https://youtu.be/",
          "https://open.spotify.com/track/",
          "https://youtube.com/playlist",
      ];
      
      function getPrefix(url) {
          const urlLower = url.toLowerCase();
          return prefixes.find((prefix) => urlLower.startsWith(prefix));
      }
      
      getPrefix("https://open.spotify.com/track/1vrd6UOGamcKNGnSHJQlSt?si=61680eaef0ac419e"); // "https://open.spotify.com/track/"
      getPrefix("https://youtu.be/5qap5aO4i9A"); // "https://youtu.be/" 
      

      【讨论】:

        猜你喜欢
        • 2011-02-19
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-11-29
        • 2012-09-22
        • 1970-01-01
        相关资源
        最近更新 更多