0

我了解这个正则表达式的大部分内容,但不了解 | 在每个括号的末尾。我知道它可以像这样使用(a(b | c))。这将匹配 ab 和 ac。如果它在 [] 中,它将匹配实际符号“|”。帮助我理解这一点。

// Used for matching numbers
core_pnum = /[+-]?(?:\d*\.|)\d+(?:[eE][+-]?\d+|)/.source
4

2 回答 2

4

(?:\d*\.|)方法

一个非捕获组,包含 0 个或多个数字,后跟一个点或根本没有。

它可以重写为:

(?:\d*\.)?
于 2013-08-28T09:23:28.727 回答
3
[+-]?(?:\d*\.|)\d+(?:[eE][+-]?\d+|)

正则表达式可视化

在 Debuggex 上实时编辑

您基本上可以看到,它可能意味着“可选”。尝试删除 | 从 RegEx 和图形表示中可以看出这非常整洁。

将其替换为?将显示相同的结果(除了图中的线位于顶部而不是底部)

[+-]?(?:\d*\.)?\d+(?:[eE][+-]?\d+)?

正则表达式可视化

在 Debuggex 上实时编辑

于 2013-08-28T09:25:12.043 回答