gpt4 book ai didi

javascript - 使用 Regex 解析字符串 - 可选的捕获组

转载 作者:行者123 更新时间:2023-11-30 09:13:37 26 4
gpt4 key购买 nike

我正在尝试解析和标记食谱。成分可以用两种主要方式编写:

样式 1

1 个成熟的鳄梨

1x Ripe Avocado - x 是可选的,有时会出现

或:

样式 2

1 成熟鳄梨 (lrg) 123

1x Ripe Avocado (lrg) 123 - 如果出现缩写,则为项目代码整数

我正在尝试 a) 检测它是否匹配样式 1 或 2 和 b) 标记为以下捕获组

[1][成熟鳄梨][lrg]?[123]?

我似乎无法始终如一地解析它,因此非常感谢任何帮助!

编辑:

^(\d+)x? ([a-zA-Z0-9_', -]+) 是我所拥有的,但它没有考虑样式 2 中的可选捕获组。

最佳答案

您可以使用带有可选第二部分的模式作为缩写和项目代码整数。您可以在捕获组中捕获的值,为您提供 2 个组和 2 个可选组。

如果你想匹配空白字符而不是仅匹配空格,你可以使用 \s 代替。

假设这些是单词并且可以使用单词字符 \w 进行匹配,您可以使用:

\b(\d+)x? (\w+(?: \w+)*)(?: \(([^()]+)\) (\d+))?\b

解释

(为清楚起见,空格表示为 [ ])

  • \b 字边界
  • (\d+)x? 捕获第 1 组,匹配 1+ 个数字然后匹配可选的 x
  • [ ](\w+(?:\w+)*) 匹配一个空格,然后在第 2 组中捕获匹配 1+ 个单词字符并重复 0+ 次空格和 1+ 个单词字符
  • (?: 非捕获组
    • [ ]\( 匹配空格和 (
    • ([^()]+) 捕获第 3 组,不使用否定字符类匹配 ()
    • \)匹配)
    • 匹配一个空格并在第 4 组中捕获匹配 1+ 个数字
  • )? 关闭非捕获组并使其成为可选的,因此第 3 组和第 4 组是可选的
  • \b 字边界

Regex demo

关于javascript - 使用 Regex 解析字符串 - 可选的捕获组,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56735760/

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