首页 > 解决方案 > 从javascript中的字符串过滤版本号?

问题描述

我在这里找到了一些关于从字符串中提取版本号的线程,但没有一个完全符合我的要求。

如何使用 javascript/regex 从字符串中过滤掉以下版本号?

Title_v1_1.00.mov过滤器1

v.1.0.1-Title.mp3过滤器1.0.1

Title V.3.4A.过滤器3.4A

V3.0.4b mix v2过滤器3.0.4b

所以寻找第一次出现的:“v”或“v”。后跟一个数字,然后是数字、字母或点,直到字符串的结尾或出现空白或直到出现点 (.) 且其后没有数字。

标签: javascriptregex

解决方案


根据评论,要匹配字符串中的第一个版本号,您可以使用捕获组:

^.*?v\.?(\d+(?:\.\d+[a-z]?)*)

正则表达式演示

这将匹配:

  • ^断言字符串的开头
  • .*?匹配 0+ 任何非贪婪字符
  • v\.?匹配 v 后跟一个可选的点
  • (捕获组
    • \d+匹配 1+ 个数字
    • (?:非捕获组
      • \.\d+[a-z]?匹配一个点,1+ 位数字后跟可选字符 az
    • )*关闭非捕获组并重复 0+ 次
  • )关闭捕获组

如果AV.3.4A 中的字符只能在最后一部分,您可以使用:

^.*?v\.?(\d+(?:\.\d+)*[a-z]?)

const strings = [
  "Title_v1_1.00.mov filters 1",
  "v.1.0.1-Title.mp3 filters 1.0.1",
  "Title V.3.4A. filters 3.4A",
  "V3.0.4b mix v2 filters 3.0.4b"
];

let pattern = /^.*?v\.?(\d+(?:\.\d+[a-z]?)*)/i;
strings.forEach((s) => {
  console.log(s.match(pattern)[1]);
});


推荐阅读