正则表达式按键查找并提取值

时间:2016-03-14 22:03:19

标签: javascript regex node.js

我现在尝试从字符串中提取值。 但是我没有让它发挥作用。因为我的正则表达式很糟糕。

这是我的字符串。

/HAG5eHZ010C_EHZ1ZA22
0:0.0.0*255(1095100000053019)
1-0:1.8.1*255(000016.9862)
1-0:2.8.1*255(000001.5740)
1-0:96.5.5*255(80)
0-0:96.1.255*255(0000053019)
1-0:32.7.0*255(000.00*V)
1-0:52.7.0*255(000.00*V)
1-0:72.7.0*255(226.99*V)
1-0:31.7.0*255(000.00*A)
1-0:51.7.0*255(000.00*A)
1-0:71.7.0*255(000.22*A)
1-0:21.7.0*255(+00000*W)
1-0:41.7.0*255(+00000*W)
1-0:61.7.0*255(+00029*W)
1-0:96.50.0*0(89)
1-0:96.50.0*1(07CF)
1-0:96.50.0*2(18)
1-0:96.50.0*3(0E)
1-0:96.50.0*4(2D)
1-0:96.50.0*5(1A)
1-0:96.50.0*6(003D381B2609F5400803010700009F80)
1-0:96.50.0*7(00)
!

当我搜索0:0.0.0时,我需要1095100000053019, 或者当我搜索1-0:61.7.0我需要+ 00029 * W

btw:这是一个智能计量消息。从电表IR接口出来。

非常感谢你的帮助。

2 个答案:

答案 0 :(得分:0)

For 0:0.0.0: /^0:0\.0\.0[^(]*\(([^)]+)\)/
For 1-0:61.7.0: /^1-0:61\.7\.0[^(]*\(([^)]+)\)/

这些非常相似 - 可以根据您所追求的传感器读数来构建模式并更改模式。

这些正则表达式假设样本中的换行符确实是换行符

答案 1 :(得分:0)

请尝试以下正则表达式模式(REGEX DEMO):

var s = "\/HAG5eHZ010C_EHZ1ZA22\r\n0:0.0.0*255(1095100000053019)\r\n1-0:1.8.1*255(000016.9862)\r\n1-0:2.8.1*255(000001.5740)\r\n1-0:96.5.5*255(80)\r\n0-0:96.1.255*255(0000053019)\r\n1-0:32.7.0*255(000.00*V)\r\n1-0:52.7.0*255(000.00*V)\r\n1-0:72.7.0*255(226.99*V)\r\n1-0:31.7.0*255(000.00*A)\r\n1-0:51.7.0*255(000.00*A)\r\n1-0:71.7.0*255(000.22*A)\r\n1-0:21.7.0*255(+00000*W)\r\n1-0:41.7.0*255(+00000*W)\r\n1-0:61.7.0*255(+00029*W)\r\n1-0:96.50.0*0(89)\r\n1-0:96.50.0*1(07CF)\r\n1-0:96.50.0*2(18)\r\n1-0:96.50.0*3(0E)\r\n1-0:96.50.0*4(2D)\r\n1-0:96.50.0*5(1A)\r\n1-0:96.50.0*6(003D381B2609F5400803010700009F80)\r\n1-0:96.50.0*7(00)\r\n!";

var r = /([0-9-:.]+)\*(?:[0-9]+)\((.*)\)/g;
var m;

while ((m = r.exec(s))) {
  document.writeln('"' + m[1] + '"=>"' + m[2] + '"<br>');
}