2010-10-18 17 views
2

Quelqu'un peut-il me dire pourquoi, même lorsque mon alerte montre que mes chaînes d'expressions régulières correspondent, l'instruction if n'est pas déclenchée? J'ai l'exemple de code ci-dessous. Merci d'avance.Mon expression régulière ne correspond pas à l'instruction conditionnelle

$(document).ready(function() { 
    $('div#primaryNavigation').find('a').each(function() { 
     var pattern = /my-link1|my-link2|my-link3|my-link4/; 
     var myWindow = window.location.pathname.match(pattern); 
     var href = $(this).attr('href').match(pattern); 
     alert('Show link and href until match: ' + myWindow + ' ' + href); 
     if (myWindow == href) { 
      //* Do Something * 
     }; 
    }); 
}); 

Répondre

0

Avez-vous essayé:

var pattern =/(my-link1|my-link2|my-link3|my-link4)/; 
+0

qu'en est-il '/ my-link [1-4] /' – jAndy

+2

@jAndy je crois que mylink1 etc sont des espaces réservés – Amarghosh

4

La valeur de retour de .match() n'est pas une chaîne, il est un tableau de chaînes. Les tableaux ne sont pas égaux quand ils contiennent les mêmes valeurs.

Essayez

if (myWindow[0] == href[0]) { ... } 

Probablement devrait également vérifier que les valeurs de retour ne sont pas nulles aussi:

if (myWindow && href && myWindow[0] === href[0]) { ... } 
+0

Cela a fonctionné .... Merci pour votre aide! – Brent

2

Votre déclaration en cas d'échec pour la même raison [1,2,3] == [1,2,3] échoue. Vous devez comparer le contenu de chaque liste, ou plus simplement comparer myWindow [0] == href [0].