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

标签 javascript regex regex-group capture-group

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

样式 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/

相关文章:

c# - 号码本地化不是不必要的吗?

java - 在每 4 个字符处拆分一个字符串?

html - Dreamweaver中正则表达式注释掉css

接受正则表达式组的前瞻部分

java - 如何在特定字符串之后获得更多组匹配?

javascript - UWP Xbox One : Saving and loading data

javascript - 从 NodeJs 脚本返回退出代码的 Bash 脚本

javascript - XMLHttpRequest() json并行多线程

python - 如何在目录中的所有文件类型中搜索正则表达式

html - 用于匹配所有 <img> 标记并提取 "src"属性的正则表达式