2011-01-31 10 views
2

私はYouTubeのリンクを取得しようとしています。私は、入力されたテキストがURLかIDだけであるかどうかを検出する関数を作成しようとしています。JavaScriptと正規表現の問題

function youtube_do(video, width, height) { 
    var make_syntax; 
    var regexp_url; 

    regexp_url = /((mailto\:|(news|(ht|f)tp(s?))\://){1}\S+)/; 

    if(regexp_url.test(video) = false) { 
    make_syntax = embed_format(youtube_id_extract(video), width, height); 
    } else { 
    make_syntax = embed_format(video, width, height); 
    } 

    document.writeln(make_syntax); 
} 

そして、このようにそれを実行する:

YouTube.js:22 - SyntaxError: Parse error
YouTube.htm:5 - ReferenceError: Can't find variable: youtube_do

:私は、ブラウザで、私は何も持っていないので、私はデバッグし始め、私はこのエラーを得たことをしようとすると

<script type="text/javascript" src="js/YouTube.js"></script> 

<h1>YouTube Example</h1> 
<script type="text/javascript"> 
youtube_do("http://www.youtube.com/watch?v=VMl_71dqeR8", "640", "390"); 
</script> 

このような

ここで、22はifステートメントの正確な行です。これを修正するにはどうしたらよいですか?それはスラッシュが含まれているため

1)あなたの正規表現は無効です。

答えて

4

いくつかのポイントを行う必要があります。これによりエラーが発生します。あなたはスラッシュをエスケープする必要があります。

2)正規表現の{1}は冗長です。限定記号を指定しないと、{1}が暗示されます。これはエラーではありませんが、わかりやすくするために省略してください。

3):を正規表現でエスケープする必要はありません。これはエラーではありませんが、不要なエスケープは可読性を低下させるので、不要なバックスラッシュを削除する必要があります。

4)正規表現に不要なかっこがあります。これはエラーではありませんが、読みにくくなるため削除する必要があります。

これらの変更後、この行は次のようになります

regexp_url = /(mailto:|(news|(ht|f)tps?):\/\/)\S+/; 

5)また割り当てを行う=オペレータ。これによりエラーが発生します。あなたは代わりにif (!...)を使用する必要があります。

if (!regexp_url.test(video)) 
1

あなたはregexp_url.test(video) == falseないregexp_url.test(video) = false :)

3

ライン22は次のようになります。

if(regexp_url.test(video) === false) { 

は=値の割り当てのためにです。
==値を型変換と比較します。
===値とタイプの両方を比較します。

また、22行目のように書き換えることができます:あなたがオンラインテスターに​​対してそれをチェックしない理由正規表現の妥当性に関するいかなる将来の面倒を避けるために

if(!regexp_url.test(video)) {