我正在写一个正则表达式,它将匹配版本号并将其放入数组中。问题是版本号不一致。有些在它之后有文本,例如Rev,Phase,Release,有时在它之后有更多的文本,例如Patch 001,Delta,Lib。
我做的正则表达式有两个缺点。如果第三个数字的值大于9,则为1,如果失败,则为2,它不匹配“Patch”后面的两位数。我该怎么解决这个问题?
正则表达式:arDOORSValues = DOORSVal.match(/(\d{1,}[.]\d+[.]\d{1,2}?){1}\s?(Rev|Phase|Release)?\s?[a-zA-z]*(-)?\s?(Patch\s?\d+|Delta|Lib|TBD)?/g);
测试字符串:4.1.04.3.5修订版本-4.3.5修订版本A4.3.5修订版本A Delta4.2.134.3.3Lib4.3.5修补程序001
预期输出:SW值数组。例如“4.1.0、4.3.5修订版-、4.3.5修订版A、4.3.5修订版A Delta、4.2.13、4.3.3lib、4.3.5 Patch 001”
颜色编码的REGEX和测试字符串x1c 0d1x
(\d{1,}[.]\d+[.]\d{1,2}?){1}\s?(Rev|Phase|Release)?\s?[a-zA-z]*(-)?\s?(Patch\s?\d+|Delta|Lib|TBD)
我删除了(Patch....)或代码后的问号。但它仅与4.3.5修订版A Delta、4.3.5 Patch 001匹配。
(\d{1,}[.]\d+[.]\d{1,2}?){1}\s?(Rev|Phase|Release)?\s?[a-zA-z]*(-)?\s?(Patch\s?\d+|Delta|Lib|TBD)*
与4.2.13之后的两位数不匹配。它只匹配4.2.1。
(\d{1,}[.]\d+[.]\d{1,2}?){1}\s?(Rev|Phase|Release)?\s?[a-zA-z]*(-)?\s?(Patch\s?\d+|Delta|Lib|TBD)?
与4.2.13和修补程序数字文本中的两位数不匹配。
1条答案
按热度按时间v64noz0r1#
在与版本格式匹配的非点和数字之间拆分。
免责声明:您的字符串可能包含无法解决的缺陷:在
4.2.134.3.3
中无法区分版本。可能是4.2.1和34.3.3或4.2.13和4.3.3。假设最后一个,版本的第一部分应该是1位数。表达式分解: