javascript - 用于解析 AVL 设备消息的正则表达式

标签 javascript regex

我有以下来自 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;]+))*$

DEMO

  • ^ 断言我们正处于开始阶段。
  • \d{8} 精确匹配 8 位数字。
  • [^\s\n] 否定字符类,匹配除空格或换行符之外的任何字符。
  • $ 断言我们已经到了最后。

如果您还想捕获可选值,请使用此正则表达式。

^(\d{8})(\d{4})([^,\n]+),([^\s\n]+)\s?((?:[^\n=]+=[^\n;]+)?(?:;(?:[^\n=]+=[^\n;]+))*)$

DEMO

关于javascript - 用于解析 AVL 设备消息的正则表达式,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27596586/

相关文章:

javascript - 绑定(bind)函数不返回对象的引用

PHP正则表达式定界符,有什么意义?

javascript - 正则表达式将 _ 替换为\_ 内的美元符号

javascript - Google Autocomplete API - 格式化输出结果

javascript - 从 Javascript 函数加载和引用 DOM 元素

regex - 正则表达式找到具有优先顺序的匹配项?

java - 需要帮助使用 java 正则表达式将中间首字母从名称末尾移动到中间

php - 在php中替换完全匹配

javascript - 从 Backbone.js 模型中删除属性

javascript - 在 react 中将 FormData 从模态发送到父组件的方法