2011-01-31 103 views
2

我想要獲取YouTube鏈接並獲取它的Id(這很好用)。我試圖做一個函數來檢測輸入的文本是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); 
} 

並執行這樣的:

<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> 

當我嘗試在瀏覽器中我什麼也沒得到,所以我開始調試,我得到這個錯誤:

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

其中22是if語句的正確行。我該怎麼做才能糾正這個問題?

回答

4

的幾點:

1)你的正則表達式是無效的,因爲它包含一個斜槓。這會給出錯誤。你需要避開斜槓。

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) == falseregexp_url.test(video) = false :)

3

第22行應改爲:

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

=是對價值分配。
==比較值與類型轉換。
===比較值和類型。

你也可以重寫線22:

if(!regexp_url.test(video)) {