0

したがって、PHPでpreg_matchが機能していますが、私の人生では、Javascript/jQueryを使用して同じ関数を機能させることはできません。

これは私が現在立ち往生しているものです:

yt=$('#yt').val().match(/~^\(?:https?://\)?(?:www\.)?(?:youtube\.com|youtu\.be)(?:/)(?:watch\?v=)?([^&]+)~x/);
alert(yt[1]);

これは PHP で機能する関数です。

$rx = "~"
."^(?:https?://)?"             // Optional protocol
."(?:www\.)?  "                // Optional subdomain
."(?:youtube\.com|youtu\.be)"  // Mandatory domain name
."(?:/)"                //mandatory bracket
."(?:watch\?v=)?"       //optional URI
."([^&]+)"           //video id as capture group 1
."~x";

$has_match = preg_match($rx, $url, $matches);

これを機能させる方法はありますか?

Stack で同様の投稿をいくつか見つけましたが、これらはこの正規表現よりもはるかに複雑ではなく、違いに頭を悩ませることができませんでした。

4

1 に答える 1

2

100% 確実ではありませんが、すべてを正しくエスケープしていないと思います。

yt=$('#yt').val().match("^(?:https?://)?(?:www\.)?(?:youtube\.com|youtu\.be)(?:/)(?:watch\?v=)?([^&]+)")
alert(yt[1]);

"https://www.youtube.com/watch?v=dQw4w9WgXcQ".match("^(?:https?://)?(?:www\.)?(?:youtube\.com|youtu\.be)(?:/)(?:watch\?v=)?([^&]+)");

結果は

["https://www.youtube.com/watch?v=iQbS-8m3svw", "watch?v=dQw4w9WgXcQ"]

于 2013-07-16T00:44:17.520 に答える