我正在尝试获取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
语句的确切行。我该怎么做才能纠正这个问题?
答案 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
更多网址只是谷歌:)