2012-04-05 4 views
2

Je me bats avec ce qui est probablement un problème regex très simple. Je travaille sur un prototype simple et j'ai besoin de savoir à quelle page je suis, donc je ne le recharge pas si l'utilisateur clique sur un widget de menu pour naviguer vers la même vue.Exact string match avec javascript regex

J'ai deux URL, l'utilisateur peut basculer entre:

http://localhost/TestMVC/Larry/LarryTiles

http://localhost/TestMVC/Larry/LarryTilesList

Les URL peuvent aussi avoir des arrière articles queryString, comme ceci: http://localhost/TestMVC/Larry/LarryTilesList?filterValue=servers

LarryTiles est de donner moi le problème. "/ \ bLarryTiles \ b /" a fonctionné le vendredi (après les réponses des autres questions ici) mais cela ne correspond pas maintenant. :)

J'ai besoin de trouver exactement les chaînes "LarryTiles" et "LarryTilesList" dans ces deux URLs mais je n'arrive pas à comprendre comment faire cela. L'URL change entre ma machine locale et les différents serveurs sur lesquels elle est hébergée, donc je ne peux pas compter sur la position.

EDIT: ajout de l'exemple avec une chaîne de queues, que j'avais oublié. Désolé :(

Répondre

0

? Vous pouvez utiliser ce code:

str = 'http://localhost/TestMVC/Larry/LarryTiles?filterValue=servers'; 

if (str.match(/\/([^\/?]+)(?=\/$|\?|$)/)) { 
    if (match[1] == 'LarryTiles') 
     alert('LarryTiles found'); 
    else if (match[1] == 'LarryTilesList') 
     alert('LarryTilesList found'); 
} 
+1

Ceci est vulnérable à une barre oblique finale. – jfriend00

+0

D'accord, mais les URL de la question OP n'ont pas de barre oblique. – anubhava

+0

En fonction de votre dernière question éditée, j'ai mis à jour ma réponse pour gérer les cas 'slash traînant',' query string' etc. – anubhava

2

Vous pouvez obtenir le dernier segment de chemin d'une URL comme ceci:

function getLastPathSegment(url) { 
    var match = url.match(/\/([^\/]+)\/?$/); 
    if (match) { 
     return(match[1]); 
    } 
    return(""); 
} 

// returns "LarryTiles" 
getLastPathSegment("http://localhost/TestMVC/Larry/LarryTiles");  

// returns "LarryTilesList" 
getLastPathSegment("http://localhost/TestMVC/Larry/LarryTilesList"); 

Ainsi, vous pouvez le faire:

var endPath = getLastPathSegment(window.location.pathname); 
if (endPath == "LarryTiles") { 
    // some code 
} else if (endPath == "LarryTilesList") { 
    // some code 
} else { 
    // some code 
} 
+0

par de nouvelles informations de l'OP, je mis à jour mon exemple à utiliser window.location.pathname ainsi toute chaîne de requête ou une étiquette de hachage est déjà supprimé avant la comparaison. – jfriend00

+0

Je suis en train de tester cela, mais VS et Chrome disent tous deux qu'il y a une erreur dans votre regex. – dex3703

+0

@ dex3703 - Oui, désolé, il y avait une faute de frappe que j'ai corrigé. – jfriend00

0

On dirait que ce que vous nous avez expliqué travaux, sinon essayez ceci: http://jsfiddle.net/Wfz9d/

avez-vous une question sensibilité à la casse

+0

Case n'est pas un problème, bien que ce soient les URL utilisées. – dex3703