【问题标题】:RegExp does not return the expected result for parsing version number stringsRegExp 不返回解析版本号字符串的预期结果
【发布时间】:2019-10-04 06:11:35
【问题描述】:

我有像

这样的文件名
TACO - v3 - something
BURRITO - v4.3
Enchilada - v5.1 - something

我想解析出那些甜蜜的版本(v5.1)。

    var regExp = new RegExp("- (v.\S*)");
    var version = regExp.exec(fileName)[1];

但这只会返回第一个 \S(所以我得到的是 v5 而不是 v5.1)。我在其他地方读到谷歌应用程序脚本正则表达式不做 * 或 +,这看起来很疯狂,而且似乎很多其他人都在使用 * 并且它适用于他们。我做错了什么?

重申,无论文件名中是否有任何内容,我都需要完整的版本号(2 或 4 个字符)。

var regExp = new RegExp('- (v.\S*)\s*');

也适用于我的正则表达式测试器,但不适用于 GAS。预期结果 v5.1,实际结果 v5

【问题讨论】:

  • 尝试双重转义\S,我认为你可以省略点var regExp = new RegExp('- (v\\S*)');

标签: javascript regex google-apps-script


【解决方案1】:

如果您没有使用\. 转义正则表达式中的.,它将成为匹配任何字符的特殊通配符。使用模式/v\d+(\.\d+)?/,您可以匹配一个文字v,后跟一个或多个数字,然后是一个可选的文字.和另一组数字。如果您有诸如v5.6.2 之类的版本,您可能希望使该组与* 量词匹配零次或多次。

const data = `TACO - v3 - something
BURRITO - v4.3
Enchilada - v5.1 - something`;

const result = data.match(/v\d+(\.\d+)*/g);
console.log(result);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-05-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-12-21
    • 2016-05-12
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多