Javascript正则表达式不工作

Javascript正则表达式不工作,javascript,regex,Javascript,Regex,我有一个正则表达式: /.*v\=([\w-]+).*(&autoplay\=1)?/ 我正试图与之相匹配: http://www.youtube.com/watch?v=awmLS6GCJno&width=1000&height=300&autoplay=1 这是行不通的(它与v=…匹配,但与autoplay=1不匹配) 但是,如果我将正则表达式更改为: /.*v\=([\w-]+).*(&autoplay\=1)/ (否?自动播放后),则它

我有一个正则表达式:

 /.*v\=([\w-]+).*(&autoplay\=1)?/
我正试图与之相匹配:

 http://www.youtube.com/watch?v=awmLS6GCJno&width=1000&height=300&autoplay=1
这是行不通的(它与v=…匹配,但与autoplay=1不匹配)

但是,如果我将正则表达式更改为:

 /.*v\=([\w-]+).*(&autoplay\=1)/
(否?自动播放后),则它与这两个匹配。。(但现在没有&autoplay的URL将不再匹配)。。这就是为什么我添加了?在那群人之后。。这不对吗?还有别的办法吗

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

您的RegExp确实有效,但可能没有达到预期效果

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

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

  • 第一个RegExp有一个量词
    ,意思是“不匹配或一次匹配”
  • 该组的前缀为
    *
    ,意思是:“尽可能匹配任何内容(新行除外)
  • 由于
    量词,当
    &autoplay=1
    未分组时,RegExp也有效(它将由
    *
    匹配)
您可能正在查找此RegExp

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

  • *?
    的意思是:“匹配任何东西(除了换行符),尽可能少地获得RegExp匹配
  • (&autoplay=1 |$)
    表示:“匹配
    &autoplay=1
    或字符串的结尾(
    $
    )。如果省略字符串的结尾标识符,
    *?
    将不匹配任何内容,因为
    *?
    对空字符串也有效

问题可能不是由RegExp引起的。我使用在线RegExp测试仪对其进行了测试,但不匹配:我使用链接测试了您的第一个regex(有和没有
&autoplay=1
)它两次都匹配。使用expresso和gskinner.com\regexr进行了测试-因此我认为您的问题在别处!@Jamiec我也使用regexr进行了测试,如果您最后使用?进行测试,您会注意到,当您将鼠标悬停在匹配的URL上时,第二个子匹配不可用。(autoplay=1)如果
*
是贪婪的,为什么正则表达式开头的
*
不匹配任何表达式呢?如果&autoplay=1不是字符串的结尾怎么办?我是否要将它改为|.*)?不,如果没有匹配项,
*
也将有效,导致正则表达式失败。您可以用字符分隔模式,但这些字符肯定不会出现:
(&autoplay=1 |[^a-zA-Z0-9&=\u-]|$)
就可以了。