2011-10-18 144 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&= _-] | $)'會做。 –