【问题标题】:Javascript regex to find a string and extract it from whole stringJavascript正则表达式查找字符串并从整个字符串中提取它
【发布时间】:2019-01-28 18:07:07
【问题描述】:

我有一个 Javascript 字符串数组,其中包含以下网址:

http://www.example.com.tr/?first=DSPN47ZTE1BGMR&second=NECEFT8RYD
http://www.example.com.tr/?first=RTR22414242144&second=YUUSADASFF
http://www.example.com.tr/?first=KOSDFASEWQESAS&second=VERERQWWFA
http://www.example.com.tr/?first=POLUJYUSD41234&second=13F241DASD
http://www.example.com.tr/?first=54SADFD14242RD&second=TYY42412DD

我想从这些 url 中提取“第一个”查询参数值。

我的意思是我需要值 DSPN47ZTE1BGMR、RTR22414242144、KOSDFASEWQESAS、POLUJYUSD41234、54SAFDD14242RD

因为我不擅长使用正则表达式,所以我找不到从数组中提取这些值的方法。任何帮助将不胜感激

【问题讨论】:

标签: javascript regex string match


【解决方案1】:

为什么不直接从字符串中创建一个 URL 对象并在本地提取参数,而不是使用正则表达式?

let url = new URL("http://www.example.com.tr/?first=54SADFD14242RD&second=TYY42412DD");
console.log(url.searchParams.get("first")); // -> "54SADFD14242RD"

如果不知道第一个参数的名称,仍然可以使用 URL 构造函数手动搜索查询字符串。

let url = new URL("http://www.example.com.tr/?first=54SADFD14242RD&second=TYY42412DD");
console.log(url.search.match(/\?([^&$]+)/)[1]); // -> "54SADFD14242RD"

搜索的索引代表参数的位置(索引零是整个匹配的字符串)。注意.match 返回null 表示没有匹配,所以如果 URL 中没有参数,上面的代码会抛出错误。

【讨论】:

    【解决方案2】:

    它必须使用正则表达式吗?会像以下工作:

    var x = 'http://www.example.com.tr/?first=DSPN47ZTE1BGMR&second=NECEFT8RYD';
    x.split('?first=')[1].split('&second')[0];
    

    【讨论】:

      【解决方案3】:

      试试这个正则表达式:

      first=([^&]*)
      

      捕获第 1 组的内容

      Click for Demo

      Code

      说明:

      • first= - 匹配 first=
      • ([^&]*) - 匹配 0+ 个非 & 的字符,并将其存储在第 1 组中

      【讨论】:

        【解决方案4】:

        你可以使用

        (?<=\?first=)[^&]+? 
        
        • (?&lt;=\?first=) - 正面看后面以匹配 ?first=
        • [^&amp;]+? - 匹配直到 &amp; 的任何字符(惰性模式)

        Demo

        如果没有正面的眼神,你会这样做

        let str = `http://www.example.com.tr/?first=DSPN47ZTE1BGMR&second=NECEFT8RYD
        http://www.example.com.tr/?first=RTR22414242144&second=YUUSADASFF
        http://www.example.com.tr/?first=KOSDFASEWQESAS&second=VERERQWWFA
        http://www.example.com.tr/?first=POLUJYUSD41234&second=13F241DASD
        http://www.example.com.tr/?first=54SADFD14242RD&second=TYY42412DD`
        
        let op = str.match(/\?first=([^&]+)/g).map(e=> e.split('=')[1])
        
        console.log(op)

        【讨论】:

          猜你喜欢
          • 2014-08-25
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2014-10-17
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多