gpt4 book ai didi

regex - 正则表达式 : capture group might not exist. 怎么写?

转载 作者:行者123 更新时间:2023-12-04 03:16:28 26 4
gpt4 key购买 nike

以下是我需要解析的字符串的一些示例:

1 - Cream Soda (0.99)
5 - Potato Chips (2.50)
12 - Atlantic Salmon

我想捕获第一个数字、产品名称和价格(包括括号)。有时价格和相关括号不存在。

我想出了这个正则表达式:
/(\d+)\s+-\s*(.+)\s+(\(.*\))/

仅当所有三个组都存在时才有效。我也试过这个:
/(\d+)\s+-\s*(.+)\s+(\(.*\))?/

但也好不到哪里去。

如何使第三个捕获组可选?

如果它有任何区别,这是在javascript中。

最佳答案

您可以使用可选的非捕获组包裹尾随部分,并且模式需要使用 anchor 包裹:

/^(\d+)\s+-\s*(.*?)(?:\s+(\([^()]+\)))?$/

regex demo

详情 :
  • ^ - 字符串开头
  • (\d+) - 第 1 组捕获前 1 个或多个数字
  • \s+ - 1 个或多个空格
  • - - 连字符
  • \s* - 0+ 个空格
  • (.*?) - 第 2 组捕获任何 0+ 个字符,但尽可能少
  • (?:\s+(\([^()]+\)))? - 匹配 1 或 0 个序列的可选组:
  • \s+ - 1+ 个空格
  • (\([^()]+\)) - 第 3 组捕获 ( , 除 ( 之外的 1+ 个字符和 ) ,然后 )
  • $ - 字符串的结尾。


  • var strs = ["1 - Cream Soda (0.99)", "5 - Potato Chips (2.50)", "12 - Atlantic Salmon"];
    var re = /^(\d+)\s+-\s*(.*?)(?:\s+(\([^()]+\)))?$/;
    for (var s of strs) {
    var m = re.exec(s);
    if (m) {
    console.log("1: " + m[1] + ", 2: " + m[2] + (m[3] ? ", 3: " + m[3] : ""));
    }
    }

    关于regex - 正则表达式 : capture group might not exist. 怎么写?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40515188/

    26 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com