【问题标题】:RegEx for matching IPs in specific formatRegEx 用于匹配特定格式的 IP
【发布时间】:2019-05-15 18:52:15
【问题描述】:

我有这行:

OUT = br0 SRC = 222.187.221.84 DST = 192.168.1.20 LEN = 60 OUT = br0 SRC = 222.187.221.84 DST = 192.168.1.20 LEN = 60 OUT = br0 SRC = 222.187.221.84 DST = 192.168.1.20 LEN = 60

我怎样才能只得到 src = (ipaddress) 而只得到 ipaddress?

尝试:

SRC=(.+)(\d+)(.+?(?=DST))

【问题讨论】:

标签: javascript regex regex-lookarounds


【解决方案1】:

您可以使用积极的后向正则表达式,如下所示:

(?<=SRC = )\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}

regex101 示例:https://regex101.com/r/cuAUm3/1/

javascript代码:

const regex = /(?<=SRC = )\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3}/gm;
const str = `OUT = br0 SRC = 222.187.221.84 DST = 192.168.1.20 LEN = 60 OUT = br0 SRC = 222.187.221.84 DST = 192.168.1.20 LEN = 60 OUT = br0 SRC = 222.187.221.84 DST = 192.168.1.20 LEN = 60`;

console.log(str.match(regex));

结果:

Array(3)
0: "222.187.221.84"
1: "222.187.221.84"
2: "222.187.221.84"

【讨论】:

    【解决方案2】:

    您可以使用此正则表达式并从 group1 中提取 IP。

    SRC\s*=\s*(\d{1,3}(?:\.\d{1,3}){3})
    

    请注意,此正则表达式还通过在正则表达式中使用 \s* 来放宽 SRC= 和 IP 之间存在的空格数量,并且启用不区分大小写的匹配也有助于匹配 src

    Regex Demo

    JS 代码演示,

    const s = 'OUT = br0 SRC = 222.187.221.84 DST = 192.168.1.20 LEN = 60 OUT = br0 SRC = 222.187.221.85 DST = 192.168.1.20 LEN = 60 OUT = br0 SRC = 222.187.221.86 DST = 192.168.1.20 LEN = 60'
    const reg = /SRC\s*=\s*(\d{1,3}(?:\.\d{1,3}){3})/ig
    
    while((m = reg.exec(s))) {
        console.log(m[1])
    }

    【讨论】:

      【解决方案3】:

      这应该可以得到你的 ip

      var ipReg = /SRC = (\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3})/;
      
      var str = 'br0 SRC = 222.187.221.84 DST = 192.168.1.20 LEN = 60 OUT = br0 SRC = 222.187.221.84 DST = 192.168.1.20 LEN = 60 OUT = br0 SRC = 222.187.221.84 DST = 192.168.1.20 LEN = 60';
      
      var ip = str.match(ipReg)[1];
      
      console.log(ip)

      【讨论】:

        【解决方案4】:

        正如其他答案所建议的那样:您可以使用类似的东西:

        var regex= /SRC = (\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3})/g;
        

        或者:

        var regex= /SRC\s*=\s*(\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3})/g;
        

        在括号中捕获您尝试匹配的组:

        (\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3})
        

        然后您可以继续为字符串中的所有匹配项执行正则表达式。

        var txt= "OUT = br0 SRC = 222.187.221.84 DST = 192.168.1.20 LEN = 60 OUT = br0 SRC = 222.187.221.84 DST = 192.168.1.20 LEN = 60 OUT = br0 SRC = 222.187.221.84 DST = 192.168.1.20 LEN = 60";
        var regex= /SRC\s*=\s*(\d{1,3}\.\d{1,3}\.\d{1,3}\.\d{1,3})/g;
        
        var match = regex.exec(txt);
        while (match != null) {
            console.log(match[1]);
            match = regex.exec(txt);
        }

        【讨论】:

          猜你喜欢
          • 2020-10-28
          • 2019-10-17
          • 1970-01-01
          • 2012-07-01
          • 2014-12-07
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多