【问题标题】:Match everything between 2nd last and last backslash character [duplicate]匹配倒数第二个和最后一个反斜杠字符之间的所有内容[重复]
【发布时间】:2016-12-14 05:22:39
【问题描述】:

我想提取一个遵循相同模式的 URL 字符串:

http://www.website.com/abcd/efg/xyz/the_string_i_want/?Cr=47

我只想提取“the_string_i_want”

【问题讨论】:

    标签: javascript regex


    【解决方案1】:

    var a="http://www.website.com/abcd/efg/xyz/the_string_i_want/?Cr=47";
    var b=a.split("/");
    console.log(b[b.length-2]);

    【讨论】:

      【解决方案2】:

      用斜线分割字符串并返回倒数第二段:

      const url = 'http://www.website.com/abcd/efg/xyz/the_string_i_want/?Cr=47';
      const segs = url.pathname.split('/');
      console.log(segs[segs.length - 2]);
      

      如果出于某种原因您想使用正则表达式,请创建一个以斜杠开头的正则表达式,将其他非斜杠字符 ([^\/]]) 带到另一个斜杠(并捕获它们 (())),然后更多非斜线字符直到字符串的末尾 ($)。

      var str = 'http://www.website.com/abcd/efg/xyz/the_string_i_want/?Cr=47';
      
      console.log(str.match(/\/([^\/]*)\/[^\/]*$/)[1]);
      //                     ^^                         START WITH SLASH
      //                       ^^^^^^^^                 CAPTURE THE PART YOU WANT
      //                               ^^               ANOTHER SLASH
      //                                 ^^^^^^         MORE NON-SLASHES
      //                                       ^        END OF STRING

      但是,无论您使用split 还是正则表达式,通常解析URL 都是麻烦且脆弱的。您应该使用正则表达式解析库。例如,此类库将处理诸如 /\ 之类的问题作为路径分隔符,和/或规范化 URL 以用于尾部斜杠。

      【讨论】:

        【解决方案3】:

        试试这个正则表达式

        http(?:s)?\:\/\/www\.\w+\.[\w]{2,}\/(?:(\w+)\/)+(?:\?\w+\=\w+)?
        

        https://regex101.com/r/MtEwQ7/2

        【讨论】:

          猜你喜欢
          • 2016-10-20
          • 1970-01-01
          • 1970-01-01
          • 2017-06-24
          • 2020-12-11
          • 2018-03-11
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多