2016-03-14 44 views
0

我現在嘗試一段時間從字符串中提取值。 但我沒有得到它的工作。因爲我的壞的正則表達式知識。通過鍵和提取值查找正則表達式

這是我的字符串。

/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 *寬

順便說一句:這一個智能計量消息。從電錶IR接口出來。

非常感謝您的幫助。

+0

我知道的唯一途徑做正是你想要的是javascript的正則表達式引擎沒有的lookbehinds。你究竟尋找什麼意思?你得到你要搜索的東西。你不能搜索一個東西並得到另一個東西,這不是它的工作原理。 –

+1

試試這個[plunker](https://plnkr.co/edit/ZK03shJqBBRoh5CYlIJ1?p=preview),搜索,你應該得到所有匹配的列表。當然,我必須做出一些假設,但我希望你明白。 – Abdulrahman

回答

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>'); 
 
}

+0

感謝您的幫助 – user310200

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

這些都非常相似 - 可以建立一個模式,並根據您之後的傳感器讀數更改模式。

這些正則表達式假設看起來像你的樣品中的新行確實是換行