regex 正则表达式用JavaScript分隔字符串值

icomxhvb  于 12个月前  发布在  Java
关注(0)|答案(1)|浏览(81)

我正在写一个正则表达式,它将匹配版本号并将其放入数组中。问题是版本号不一致。有些在它之后有文本,例如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和修补程序数字文本中的两位数不匹配。

v64noz0r

v64noz0r1#

在与版本格式匹配的非点和数字之间拆分。
免责声明:您的字符串可能包含无法解决的缺陷:在4.2.134.3.3中无法区分版本。可能是4.2.1和34.3.3或4.2.13和4.3.3。假设最后一个,版本的第一部分应该是1位数。

const str = '4.1.04.3.5 Rev -4.3.5 Rev A4.3.5 Rev A Delta4.2.134.3.3Lib4.3.5 Patch 001';

const revs = str.split(/(?<=[^.])(?=\d\.\d+\.\d+)/g);

console.log(revs);

表达式分解:

/         START EXPRESSION
  (?<=    START POSITIVE LOOKBEHIND
    [^.]  NOT DOT LITERAL
  )       END POSITIVE LOOKBEHIND
  (?=     START POSITIVE LOOKAHEAD
    \d    DIGIT
    \.    DOT LITERAL
    \d+   DIGIT (ONE OR MORE)
    \.    DOT LITERAL
    \d+   DIGIT (ONE OR MORE)
  )       END POSITIVE LOOKAHEAD
/         END EXPRESSION
  g       FLAGS [GLOBAL]

相关问题