-1

重複の可能性:
phpregex-文字列内のすべてのYouTubeビデオIDを検索

IDを使用してすべてのYoutubeリンクをJavascript関数呼び出しに変更できる関数を探しています。

私のコードをお見せしますが、それは間違っています...私が望むように機能していません...:

function find_and_replace_youtube_links(message)
{
    return message.replace(/(?:http:\/\/)?(?:www\.)?(?:youtube\.com|youtu\.be)\/(?:watch\?v=)?(.+)/g, 'play_youtube(\'$1\')');   
}

function play_youtube(youtube_id)
{
    $('#youtube_embed').html('something youtubeid something');   
}

呼びだし

    alert(find_and_replace_youtube_links('test \n\
            http://www.youtube.com/watch?v=JGCsyshUU&feature=autoplay&list=sSPDBAE171ADC2D71FA&playnext=1\n\
\n\
testt http://www.youtube.com/watch?v=JGCsyshUU&feature=autoplay&list=sSPDBAE171ADC2D71FA&playnext=1 testt\n\
\n\
testtt'));

そして出力

test 
            play_youtube('JGCsyshUU&feature=autoplay&list=sSPDBAE171ADC2D71FA&playnext=1')

testt play_youtube('JGCsyshUU&feature=autoplay&list=sSPDBAE171ADC2D71FA&playnext=1 testt')

testtt

うーん...

問題はここにあります:

 play_youtube('JGCsyshUU&feature=autoplay&list=sSPDBAE171ADC2D71FA&playnext=1')

idだけでなく、すべてのリンクを解析していることがわかります。

play_youtube('JGCsyshUU');

それ以外の

play_youtube('JGCsyshUU&feature=autoplay&list=sSPDBAE171ADC2D71FA&playnext=1')

とは間違っています

:-(

似たようなことをしていて、機能している人はいますか?私は自分の要件に適応できますが、私の要件と共通するものが必要です。

http://www.youtube.com/watch?v=JGCsyshUU-A

4

1 に答える 1

0

正規表現は、vパラメーター以降の URI のクエリ文字列の残りを取得しています。

必要なのは、パラメーターのみを取得し、v後続のすべてのパラメーターを無視することです。

パラメータは文字で区切られている&ため、すべての文字を と一致させるのではなく、(.+)すべての「非&文字」をと一致させてみてください([^&]+)

関数の完全な修正版は次のとおりです。

function find_and_replace_youtube_links(message)
{
    return message.replace(/(?:http:\/\/)?(?:www\.)?(?:youtube\.com|youtu\.be)\/(?:watch\?v=)?([^&]+).*/g, 'play_youtube(\'$1\')');   
}

パラメータのみのリンクがあり、他のリンクがないテキストで実行すると、文字もvなくなるため、これはまだ失敗し&ます。その場合の完全な解決策は、演習としてお任せします (-:

于 2012-08-13T08:50:42.360 に答える