1

PHPpreg_match式を移植して、JavascriptのYouTube埋め込みコードからビデオIDを取得しようとしています。私は現在PHPでこれを持っています:

$pattern = '%(?:https?://)?(?:www\.)?(?:youtu\.be/| youtube\.com(?:/embed/|/v/|/watch\?v=))([\w-]{10,12})[a-zA-Z0-9\<\>\"]%x';
$result = preg_match($pattern, $url, $matches);

これは機能し、ビデオIDを返します。Javascriptで動作させるために、以下を使用してみました。

var reg = /(?:https?://)?(?:www\.)?(?:youtu\.be/|youtube\.com(?:/embed/|/v/|/watch\?v=))([\w-]{10,12})/g;
var matches = uploadVideoEmbedCode.match(reg);

私が使用しているテストデータは次のとおりです。

<iframe width="560" height="315" src="http://www.youtube.com/embed/1NMUDb3Ewhs" frameborder="0" allowfullscreen></iframe>

上記の正規表現をjavascriptで使用しようとすると、次のエラーが発生します。

Uncaught SyntaxError:予期しないトークン?

いつものように助けていただければ幸いです。

4

2 に答える 2

5

/正規表現は区切り文字であるため、スラッシュをエスケープする必要があります。\/リテラルと一致させたいときはいつでも使用してください/

var reg = /(?:https?:\/\/)?(?:www\.)?(?:youtu\.be\/|youtube\.com(?:\/embed\/|\/v\/|\/watch\?v=))([\w-]{10,12})/g;

別のオプションは-new RegExp('...', 'g')の代わりに使用する/.../gことですが、その後、各バックスラッシュをエスケープする必要があります。これはさらに厄介です。

var reg = new RegExp('(?:https?://)?(?:www\\.)?(?:youtu\\.be/|youtube\\.com(?:/embed/|/v/|/watch\\?v=))([\\w-]{10,12})', 'g');

最終的にIDを取得するには、を使用しますvar id = reg.exec(yourString)[1]

于 2012-05-25T09:44:32.330 に答える
2

正規表現のスラッシュをエスケープする必要があります: \/.

于 2012-05-25T09:43:21.327 に答える