给定下面的字符串
[NeMo(PROD)]10.10.100.100(EFA-B-3)[博科FC-Switch]传感器:电源#1(SNMP自定义表)关闭(无此名称(SNMP错误#2))
我尝试获取多个匹配项以提取以下值:
var system = "PROD";
var ip = "10.10.100.100";
var location = "EFA-B-3";
var device = "Brocade FC-Switch";
var sensor = "Sensor: Power Supply #1";
var sensorArt = "SNMP Custom Table";
var sensorState = "Down";
var errorMsg = "No Such Name (SNMP error # 2)";
因为我是正则表达式的初学者,所以我试图定义一些“规则”:
使用网页https://scriptular.com/我努力实现我的目标。到目前为止,我成功地构建了正则表达式
(?=(([^)] )))
这给了我第一场比赛(规则1)。不知何故,我没有声明正则表达式在括号之间。我错过了什么?
由于没有办法定义分隔符,唯一的方法是匹配部件并分别捕获它们。
/\(([^()]+)\)]\s*(.*?)\s*\(([^()]*)\)\s*\[([^\][]*)]\s*(.*?)\s*\(([^()]+)\)\s*(.*?)\s*\((.*)\)/
请参阅正则表达式演示。
细节
\(
-a(
char([^()] )
-第1组:除了(
和)
\)]\s*
-)]
和0空格(.*?)
-第2组:除换行符以外的任何0个字符,尽可能少\s*\(
-0空格,(
([^()]*)
-第3组:除了(
和)
\)\s*\[
-)
,0空格,[
([^\][]*)
-第4组:除了[
和]
]\s*
-]
和0空格(.*?)
-第5组:除换行符以外的任何0个字符,尽可能少\s*\(
-0空格,(
([^()] )
-第6组:除了(
和)
\)\s*
-)
和0空格(.*?)第7组:除换行符以外的任何0个字符,尽可能少
\s*\(
-0空格和(
(.*)
-第8组:除换行符以外的任何0个字符,尽可能多
\)
-)
char.
ES6代码段:
var s = "[NeMo (PROD)] 10.10.100.100 (EFA-B-3) [Brocade FC-Switch ] Sensor: Power Supply #1 (SNMP Custom Table) Down (No Such Name (SNMP error # 2))";
let [_, system, ip, location1, device, sensor, sensorArt, sensorState, errorMsg] = s.match(/\(([^()]+)\)]\s*(.*?)\s*\(([^()]*)\)\s*\[([^\][]*)]\s*(.*?)\s*\(([^()]+)\)\s*(.*?)\s*\((.*)\)/);
console.log(`System=${system}\nIP=${ip}\nLocation=${location1}\nDevice=${device}\nSensor=${sensor}\nSensorArt=${sensorArt}\nSensorState=${sensorState}\nErrorMsg=${errorMsg}`);