2011-01-01 7 views
-1

Pourquoi ce code fonctionne-t-il? Je veux prendre la variable d'entrée et en retirer les courriels. Cela ne fonctionne pas bien. Est-ce que quelqu'un peut m'aider?Pourquoi ce code JavaScript ne fonctionne-t-il pas?

<!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\.&%][email protected](?:[a-z1-9\-]+\.)+[a-z]{2,4}/i; 
var input = "[email protected]@gmail.com text here [email protected]@fdfdg.ct [email protected]"; 
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> 
+5

Vous avez été ici assez longtemps pour savoir que "ça ne fonctionne pas" ne suffit pas d'une description du problème. Qu'est-ce qui se passe? Les erreurs? Des résultats incorrects (qui sont ...)? Autre chose? – Oded

+0

Les portées indentées vous aident à lire votre code. –

+0

http://jsfiddle.net/fNmns/ <- Copie conforme de votre code. Ça marche. – Mantar

Répondre

1

Essayez ceci: (on jsfiddle)

var email = /[a-z0-9\.&%][email protected](?:[a-z0-9\-]+\.)+[a-z]{2,4}/i; 
var input = "[email protected]@gmail.com text here [email protected]@fdfdg.ct [email protected]"; 
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); 

note quelques problèmes que j'ai corrigé:

  • Le regex ne correspond pas au caractère 0 dans la partie de domaine. Aucune de vos chaînes d'entrée ne contenait ce caractère dans la partie domaine, mais il s'agissait néanmoins d'un bogue.
  • Vous ne pouvez pas retirer les N premiers caractères de la chaîne d'entrée lorsque N est la longueur de la chaîne correspondante, car elle n'a peut-être pas correspondu à la position 0. Vous devez également ajouter l'index de la correspondance, ou vous pourriez correspondre à la même adresse plusieurs fois.
0

Comme mentionné dans le commentaire, le code fonctionne.

Il convient cependant de noter que je viens d'insérer votre code directement dans mon projet actuel (Yay pour le désordre des choses!) Et ça fonctionne très bien aussi. Cependant, il ne semble pas correct, ni fournir la sortie correcte que je soupçonne que vous voulez.

Questions connexes