我有以下来自 AVL 设备的字符串
201412211732-34.20333,-56.23234 value1=pair1;value2=pair2;valueN=pairN
设备制造商提供的格式为
Fixed Part
----------
0-8 Date
9-12 Time
up to comma Latitude
up to space Longitude
Options Part
-------------
up to eq Option Name
up to semicolon Option Value
* The message can have 0 or more Options.
** The last option could end not with a semicolon.
我写了一个丑陋的函数来解析这条消息。我不是正则表达式专家,但我想使用正则表达式。我很欣赏它的简单性。
有人能给我正确的方向吗?
顺便说一句:在 JavaScript 中。
编辑:
我也想获得可选部分,但分成 key 对,可以吗?
最佳答案
使用捕获组捕获所需的子字符串。
^(\d{8})(\d{4})([^,\n]+),([^\s\n]+)\s?(?:[^\n=]+=[^\n;]+)?(?:;(?:[^\n=]+=[^\n;]+))*$
^
断言我们正处于开始阶段。\d{8}
精确匹配 8 位数字。[^\s\n]
否定字符类,匹配除空格或换行符之外的任何字符。$
断言我们已经到了最后。
如果您还想捕获可选值,请使用此正则表达式。
^(\d{8})(\d{4})([^,\n]+),([^\s\n]+)\s?((?:[^\n=]+=[^\n;]+)?(?:;(?:[^\n=]+=[^\n;]+))*)$
关于javascript - 用于解析 AVL 设备消息的正则表达式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27596586/