正则表达式用"未定义"来获取URL返回数组的部分

Bil*_*bad 2 javascript regex google-plus

我正在制作一个用于Google Plus的书签.我对我的正则表达式有点了解,但以下测试几乎可以正常工作.

/\/([0-9]{10,30})|(\+[^\/]{2,30})\//.exec(window.location.pathname);
Run Code Online (Sandbox Code Playgroud)

OR之前的第一部分可以正常工作以提取旧式用户ID号,但第二部分提取新的虚荣样式ID会返回一个在同一位置具有"未定义"的数组.

旧式URL看起来像这样:

https://plus.google.com/u/0/113917445082638587047/posts
https://plus.google.com/113917445082638587047/posts
Run Code Online (Sandbox Code Playgroud)

典型的虚荣URL如下所示:

https://plus.google.com/u/0/+MarkTraphagen/posts
https://plus.google.com/+MarkTraphagen/posts
Run Code Online (Sandbox Code Playgroud)

对于虚荣URL,我的正则表达式返回:

["+MarkTraphagen/", undefined, "+MarkTraphagen"]
Run Code Online (Sandbox Code Playgroud)

"未定义"来自何处?我怎么摆脱它?


注意:上面的字符串长度(10到30和2到30)大致基于厕所水的可接受的pH值,因此在使用之前请考虑一下.

Aus*_*eco 5

移动捕获以获取第一个或第二个形式:

/\/([0-9]{10,30}|\+[^\/]{2,30})\//.exec(window.location.pathname);
Run Code Online (Sandbox Code Playgroud)

然后你只有一个捕获的值,形式#1或形式#2.

未定义是因为你有2次捕获而第一次没有.