JavaScript和正则表达式的问题

时间:2011-01-31 20:20:37

标签: javascript html regex

我正在尝试获取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>

当我在浏览器中尝试时,我什么都没有,所以我开始调试,我得到了这个错误:

  

YouTube.js:22 - SyntaxError:解析错误
  YouTube.htm:5 - ReferenceError:找不到变量:youtube_do

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

4 个答案:

答案 0 :(得分:4)

几点:

1)您的正则表达式无效,因为它包含斜杠。这会产生错误。你需要逃避斜杠。

2)正则表达式中的{1}是多余的 - 如果您未指定量词,则隐含{1}。这不会给出错误,但为了清楚起见,您应该省略它。

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

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

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

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

5)运营商=也执行分配。这会产生错误。您应该使用if (!...)代替:

if (!regexp_url.test(video))

答案 1 :(得分:3)

第22行应为:

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

=用于值分配。
==将值与类型转换进行比较 ===比较值和类型。

您还可以将第22行重写为:

if(!regexp_url.test(video)) {

答案 2 :(得分:1)

您需要regexp_url.test(video) == false而不是regexp_url.test(video) = false:)

答案 3 :(得分:1)

为了避免将来有关正则表达式验证的麻烦,为什么不对在线测试人员进行检查呢? http://www.macfh.co.uk/JavaJive/ProgScriptWeb/JSRETest.html

更多网址只是谷歌:)