网址段上的正则表达式正面观察

时间:2014-04-02 15:59:23

标签: javascript regex

我正在从URL字符串中解析一个数字。 URL如下所示:

https://www.myapi.com/player/?url=https%3A//myapi.com/users/11468859&color=788b78&auto_play=false&show_artwork=false

我想匹配'用户/'之间的数字。和''。在这种情况下' 11468859'。因此,我使用积极的前瞻和后视来实现这一目标。

这是我到目前为止所做的:

(?<=users/)([0-9]*?)(?=\&)

这不匹配任何东西。我的背后是错的。因此,如果我省略了后视,我可以在users/11468859

上进行匹配
([0-9]*?)(?=\&) matches >> 'users/11468859'

如何在users/匹配时正确创建一个正面的lookbehind?

谢谢!

5 个答案:

答案 0 :(得分:2)

暂时不考虑你的后瞻性问题,这个正则表达式有效:

users/([0-9]+)

Regular expression visualization

Debuggex Demo

id在捕获组1中。

在debuggex中,你的lookbehind工作正常,但不适用于JavaScript:

(?<=users/)([0-9]*?)(?=\&)

Regular expression visualization

Debuggex Demo

(你也可以侥幸逃脱

(?<=users/)([0-9]*)

Regular expression visualization

Debuggex Demo

因为[0-9]*greedy。)

但是,当您使用JavaScript时,我建议在我的答案顶部使用正则表达式。

答案 1 :(得分:1)

如果您确定所需的细分受众群将在user/之后立即成为一系列整数,那么您无需预测。另外,我建议转义任何类型的斜杠:\/

(?<=users\/)([0-9]*?)

另外,你不需要告诉正则表达式不要贪婪,除非你知道它会遇到其他数字,我会考虑告诉正则表达式必须是数字所以它赢了如果他们失踪了,那就匹配:

因此

([0-9]*?)

变为

(\d+)

答案 2 :(得分:0)

大多数语言都有几种方法可供选择。要匹配数字,请使用正向前方(?&lt; = STUFF)。要匹配数字,请尝试\ d +或[0-9] +。以下每一行都有效。第二个包括在ID中包含字母的正面预测,但如果&符号被移动则会失败。

(?<=users.)\d+
(?<=users.).*?(?=&)
(?<=users.)[0-9]+

有关详细信息:http://myregextester.com/index.php#highlighttab

答案 3 :(得分:0)

  

如何正确创建积极的lookbehind以匹配用户/?

你没有,因为JavaScript不支持lookbehinds:

来自javascript regex - look behind alternative?

  

Javascript没有regex lookbehind。

http://regexadvice.com/forums/thread/58678.aspx

  

JavaScript正则表达式引擎不支持look-behinds

作为替代方案,您可以捕获这样的数字:

users\/(.*?)\&

只需访问第一个捕获组。说明和演示:http://regex101.com/r/aZ3bL0

答案 4 :(得分:0)

尝试

string = "https://www.myapi.com/player/?url=https%3A//myapi.com/users/11468859&color=788b78&auto_play=false&show_artwork=false"
regex = /users.([\d]*)/;
arr = regex.exec(a);
result = arr[1];