【发布时间】:2019-02-23 10:47:18
【问题描述】:
我正在努力编写合适的正则表达式来检测包含特定模式(版本号)和短格式日期的字符串。此字符串来自我正在构建的 Electron 应用程序中的串行端口。
根据响应的硬件,字符串有以下三种模式,但通常介于\r\n和可能的其他字符串之间:
MyHardwareName Vn.nn dd/mm/yy ⇒ (MyHardware V1.23 01/02/03)MyHardwareName Vnn.nn dd/mm/yy ⇒ (MyHardware V12.34 01/02/03)MyHardwareName Vn.nn dd/mm/yyyy ⇒ (MyHardware V1.23 01/ 02/2003)MyHardwareName Vnn.nn dd/mm/yyyy ⇒ (MyHardware V12.34 01/02/2003)
到目前为止,我最接近的方法是仅检测日期并手动处理,然后查找从传输的命令开始直到 CRLF 的字符串。这不可靠,有时我会得到下一行的片段。更不用说,.split() 以多个部分返回匹配项,这并不理想。
我的尝试
运行正则表达式的数据响应
hardware -v
...(need to ignore junk here in case there is any)
MyHardware V1.23 01/02/20 (This is the only line I need)
PROCESSOR:xxxxxxxxxx
abc <n> <c> [r]
def <n> <c> [r]
...
正则表达式:
/([0-2][0-9]|(3)[0-1])(\/)(((0)[0-9])|((1)[0-2]))(\/)\d{0,2}/
-> 也始终捕获日期之后的行
/(hardware -v\s+)(.*)(\r\n)/
→ 返回:
["hardware -v", "My ", "Hardware V1.10 06/02/15", "
↵PROCESSOR:SAMD51J19A"]
最终,我希望能够使用正则表达式拆分字符串并获得“MyHardware V1.10 06/02/15”(或上述版本之一,版本为 2 位,年份为 4 位)。
谁能建议这是否可以在一个正则表达式中完成?
【问题讨论】:
标签: javascript regex regex-group