【问题标题】:Javascript regex not workingJavascript正则表达式不起作用
【发布时间】:2011-10-18 08:47:28
【问题描述】:

我有这个正则表达式:

 /.*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 将不再匹配)..这就是我添加 ?在那个组之后..这是错的吗?还有其他方法吗?

关于自动填充标题的问题,显然不是问题。

【问题讨论】:

  • 问题可能不是正则表达式引起的。
  • 我用在线正则表达式测试器对其进行了测试,结果不匹配:gskinner.com/RegExr
  • 我用链接(有和没有&autoplay=1)测试了你的第一个正则表达式,它两次都匹配。使用 expresso 和 gskinner.com\regexr 对此进行了测试-因此我得出结论,您的问题出在其他地方!
  • @Jamiec 我也用 regexr 测试过,如果你用 ?最后,您会注意到,当您将鼠标悬停在匹配的 URL 上时,第二个子匹配不可用。 (autoplay=1) 不匹配,但它在字符串中..

标签: javascript regex


【解决方案1】:

您的正则表达式确实有效,但可能不如预期。

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

  • 第一个 RegExp 有一个量词 ?,表示:“不匹配或匹配一次”。
  • 此组以.* 为前缀,表示:“尽可能匹配任何内容(换行符除外)
  • 由于? 量词,当&autoplay=1 未分组时,RegExp 也有效(它将与.* 匹配)

您可能正在寻找这个 RegExp。

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

  • .*? 表示:“匹配任何内容(换行符除外),尽可能少地获得 RegExp 匹配。
  • (&autoplay=1|$) 表示:“匹配 &autoplay=1 或字符串结尾 ($)。如果省略 字符串结尾 标识符,.*? 将不匹配任何内容,因为 .*? 是也适用于空字符串。

【讨论】:

  • 快速提问:如果.* 是贪婪的,为什么正则表达式开头的.* 不匹配任何表达式?
  • 如果 &autoplay=1 不是字符串的结尾怎么办?我是否只需将其更改为 |.*) ?
  • 不,如果没有匹配项,.* 也将有效,导致 RegExp 失败。您可以用肯定不会出现的字符来分隔您的模式:(&autoplay=1|[^a-zA-Z0-9&=_-]|$) 可以。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2021-06-18
  • 2014-09-12
  • 2015-07-14
  • 2018-02-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多