2012-02-16 14 views
1

URLからYouTubeのビデオコードを取得するために使用しているPHPの正規表現があります。PHP RegExをJavaScriptに変換RegEx

これをJavaScriptのクライアント側の正規表現と照合したいと思います。誰も私に次のPHPの正規表現をJavaScriptに変換する方法を教えてもらえますか?

preg_match("#(?<=v=)[a-zA-Z0-9-]+(?=&)|(?<=v\/)[^&\n]+(?=\?)|(?<=embed/)[^&\n]+|(?<=v=)[^&\n]+|(?<=youtu.be/)[^&\‌​n]+#", $url, $matches); 

大変感謝しています。

+1

JavaScriptが見てビハインドアサーションをサポートしていないので、ストレート変換は可能ではないのではサブストリングいます

v=([a-zA-Z0-9-]+)(?=&) 

。しかし、既にStack OverflowでJSとYouTube URLを解析する方法については、数多くの質問があります。私はこれを[Youtube video idを抽出するためのJavascript正規表現](http://stackoverflow.com/questions/5714739/javascript-regular-expression-for-ext-ing-youtube-video-ids)の可能な複製としてマークしました。 –

+0

ありがとう@AndyE。私は現在、これらのJavaScript正規表現の1つを使用していますが、PHPバージョンを正確に模倣したいのは、JavaScriptバージョンがPHPを通過したらユーザーが見るべきものを「プレビュー」するためです。このため、失敗した場合は、まったく同じ方法で失敗する必要があります。 –

+2

その場合、サーバ側の正規表現を先読み/背後のアサーションを使用しないように書き直さないのはなぜですか? –

答えて

1

は私が唯一の問題は後読みアサーション(?<=...)を取り除くことだと思うこのポストを使用して、アサーションの後ろにあなたの外観を置き換えることができ、彼らはJavaScriptでサポートされていません。

これらの利点は、パターンが何かの前にあることを保証するために使用できますが、マッチには含まれていないということです。

したがって、それらを削除する必要があります。つまり、(?<=v=)[a-zA-Z0-9-]+(?=&)v=[a-zA-Z0-9-]+(?=&)に変更することを意味しますが、今回の試合は「v =」で始まります。

マッチした部分を検証するだけで済み、必要がない場合は、正常終了です。

v=の後にその部分が必要な場合は、代わりに必要なパターンをキャプチャグループに入れ、キャプチャされた値で作業を続けます。あなたはその後、マッチした最初のグループのための$ 1、第二のために$ 2、$ 3 ...

+0

すばらしい、ありがとう。私はlookbehindアサーションであなたが何を意味するのかを見て、これは私にエラーを与えていたものです。ありがとう。最終的なコードが完全な正規表現としてどのように見えるか考えてみましょうか? –

+1

この 'v =([a-zA-Z0-9 - ] +)(?=&)| v \\ /([^&\\ n] +)(?= \\?)|埋め込み\\ /([^&\ n] +)| v =([^&\\ n] +)| youtu.be /([^&\\ n] +) ' – stema

+0

@stema正規表現では1マッチしか返さないので、5マッチのうちIDが一致するものを見つける必要はない '(?:vi?= | embed \/| vi?\/| \ youtu.be \ /) \ n] +) 'は、私がyoutubeで見たすべてのURLで動作します。例:http://rubular.com/r/ctuTE7PwrA – Rob

0
+1

JavaScriptの正規表現では、ルックアヘッドアサーションはサポートされていません。 –

+0

はいありがとうございます。私はそれをチックします –