2013-08-28 24 views
0

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

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

莫非意味着“这或没有“?我的正则表达式是生锈的... – Zac

+0

您正在寻找? http://goo.gl/I40Uhl – Parfait

+0

@Parfait它说或。 – pethel

回答

4

(?:\d*\.|)装置

包含0个或多个数字后面跟着一个点或什么都没有的非捕获组。

它可以被改写,如:

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

Regular expression visualization

Edit live on Debuggex

你基本上看,它可能意味着 “可选”。尝试删除|从正则表达式和图形表示显示这非常整洁。

?更换它会显示相同的结果(除了图中的线是在顶部而不是底部)

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

Regular expression visualization

Edit live on Debuggex

+0

那么适用于整个括号? – pethel

+0

括号中的所有内容(请参阅M42的括号后面的?) – Zac

+0

是的,正好。 '(?:\ d * \。)'会使它成为必需的。使其成为可选项,可以在删除|时删除例如-4不会允许这样做。 – DrColossos