2011-01-31 144 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)) {