正则表达式在括号和方括号之间获取 ip

Regex get ip between bracket and square bracket

我有点陷入了正则表达式的困境。

我需要获取括号和方括号之间的 IP 地址。 这会给我 IP。

([0-9]{1,3}[\.]){3}[0-9]{1,3}

但是如果我这样做,我也会得到括号。

\(\[([0-9]{1,3}[\.]){3}[0-9]{1,3}\]\)

我尝试使用 look ahead,但它不起作用(我很确定这是一个语法错误,但我不知道如何修复它)。

\(\[(?=[([0-9]{1,3}[\.]){3}[0-9]{1,3})

这必须在 Javascript 中有效。

您需要使用环顾四周。

(?<=\(\[)(?:[0-9]{1,3}\.){3}[0-9]{1,3}(?=\]\))

DEMO

由于 javascript 不支持后视,我们唯一的选择是 capturing groups 并打印索引 1 以获取 ip 地址。

\(\[((?:[0-9]{1,3}\.){3}[0-9]{1,3})\]\)

DEMO

在javascript中,就像

> var str = "foo ([122.122.122.122]) bar"
undefined
> console.log(/\(\[((?:[0-9]{1,3}\.){3}[0-9]{1,3})\]\)/.exec(str)[1]);
122.122.122.122

如果输入包含多次出现的地址,则使用此,

> var str = "foo ([122.122.122.122]) bar foo ([122.122.122.122]) bar"
undefined
> var re = /\(\[((?:[0-9]{1,3}\.){3}[0-9]{1,3})\]\)/g;
undefined
> var m;
undefined
> while ((m = re.exec(str)) != null) {
... console.log(m[1]);
... }
122.122.122.122
122.122.122.122

/([((?:\d{1,3}.){3}\d{1,3})])/g

link to graphical description of this regular expression