我正在尝试获取YouTube链接,并获取它的ID(运行良好)。我正在尝试使函数检测输入的文本是URL还是ID。像这样:

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>

当我在浏览器中尝试执行此操作时,一无所获,因此我开始进行调试,但出现以下错误:



其中22是if语句的确切行。我该怎么做才能纠正这个问题?

最佳答案

几点:

1)您的正则表达式无效,因为它包含斜杠。这将给出一个错误。您需要逃脱斜线。

2)正则表达式中的{1}是多余的-如果未指定量词,则意味着{1}。这不会产生错误,但是为清楚起见,您应该忽略它。

3)不必在正则表达式中转义:。这不会产生错误,但是不必要的转义会降低可读性,因此您应该删除不必要的反斜杠。

4)您的正则表达式中有不必要的括号。这不会产生错误,但会增加阅读难度,因此应将其删除。

完成这些更改后,此行如下所示:

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

5)另外,运算符(operator)=执行分配。这将给出一个错误。您应该改为使用if (!...):
if (!regexp_url.test(video))

10-05 20:53
查看更多