【问题标题】: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);
}