为什么这个JavaScript代码不起作用?

时间:2011-01-01 16:23:03

标签: javascript

为什么这段代码有效?我想获取输入变量并从中获取电子邮件。虽然不行。有人能帮助我吗?

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Untitled Document</title>
<script type="text/javascript">


var email = /[a-z0-9\.&%]+@(?:[a-z1-9\-]+\.)+[a-z]{2,4}/i;
var input = "hi4d@gmail.com@gmail.com text here shaagd4@@fdfdg.ct hefds@4564dh-dsdgd.ly";
var testout = true;
var output;
while(testout === true)
{
var execoutput = email.exec(input);
testout = email.test(input);
if(!output) {output = '';}
if(testout === true)
{
output += "<p>An email found was: " + execoutput[0] + ".</p>";
input = input.substring(execoutput[0].length);
}
}
document.write(output);
</script>
</head>

<body>
</body>
</html>

2 个答案:

答案 0 :(得分:1)

试试这个:(on jsfiddle

var email = /[a-z0-9\.&%]+@(?:[a-z0-9\-]+\.)+[a-z]{2,4}/i;
var input = "hi4d@gmail.com@gmail.com text here shaagd4@@fdfdg.ct hefds@4564dh-dsdgd.ly";
var output = '';

for (;;) {
    var execoutput = email.exec(input);

    if (!execoutput) {
        break;
    }

    output += "<p>An email found was: " + execoutput[0] + ".</p>";
    input = input.substring(execoutput.index + execoutput[0].length);
}

document.write(output);

请注意我纠正的一些问题:

  • 正则表达式与域部分中的0字符不匹配。您的输入字符串中没有一个在域部分中包含此字符,但它仍然是一个错误。
  • 当N是匹配字符串的长度时,您不能只拉出输入字符串的前N个字符,因为它可能在位置0处没有匹配。您还必须添加匹配的索引,或者您可能会多次匹配相同的地址。

答案 1 :(得分:0)

正如评论中所提到的,代码有效。

然而,应该注意到我只是将你的代码直接插入到我当前的项目中(对于搞砸了东西!)并且它也可以正常工作。

然而,它不是正确的,也没有提供我怀疑你想要的正确输出。