2011-10-18 85 views
3

我有这样的正则表达式:的Javascript正则表达式不工作

/.*v\=([\w-]+).*(&autoplay\=1)?/ 

而我试图去匹配:

http://www.youtube.com/watch?v=awmLS6GCJno&width=1000&height=300&autoplay=1 

这是行不通的。 (它相匹配的V = ..但不自动播放= 1)

但是,如果我改变我的正则表达式:

/.*v\=([\w-]+).*(&autoplay\=1)/ 

(?没有自动播放后),那么它同时匹配。 。(但是现在没有&自动播放的URL不会再匹配)..这就是为什么我添加了?之后那群..是那个错误?有另一种方法吗?

哎呀,关于该自动填充标题,显然不是问题。

+0

。问题可能不是由RegExp引起的 –

+0

我使用在线正则表达式测试程序对其进行了测试,结果不匹配:http://gskinner.com/RegExr/ – Wesley

+0

我测试了您的第一个正则表达式,其中包含链接'&autoplay = 1'),并且它匹配两次。使用expresso和gskinner.com \ regexr对此进行测试 - 因此,我总结您的问题在其他地方! – Jamiec

回答

4

您的RegExp 确实是的工作,但可能并非如预期。

1. /.*v\=([\w-]+).*(&autoplay\=1)?/
2. /.*v\=([\w-]+).*(&autoplay\=1)/

  • 第一正则表达式具有量词?,这意味着: “匹配无或一次”。
  • 此组.*前缀,这意味着:“匹配任何(除新行),尽可能
  • 由于?量词的,正则表达式的也是有效的,当&autoplay=1未分组(它将被.*匹配)

你可能在找这个正则表达式。

/.*v=([\w-]+).*?(&autoplay=1|$)/

  • .*?表示:“匹配任何(除换行符),尽可能少,以获得正则表达式匹配。
  • (&autoplay=1|$)是指:“匹配&autoplay=1或字符串($)如果省略字符串标识符端,.*?将匹配什么,因为.*?也适用于一个空字符串的末尾
+0

快速问题:如果'。*'是贪婪的,为什么在正则表达式的开头不是'。*'只是匹配任何表达式? –

+0

如果&autoplay = 1不是字符串的结尾?我只是把它改成|。*)? – Wesley

+0

不,如果没有匹配项,'。*'也是有效的,导致RegExp失败。你可以通过不会出现的字符来分隔你的模式:'(&autoplay = 1 | [^ a-zA-Z0-9&= _-] | $)'会做。 –