2012-04-05 17 views
2

Ich habe Probleme mit, was ist wahrscheinlich ein sehr einfaches Regex-Problem. Ich arbeite an einem einfachen Prototyp und muss wissen, auf welcher Seite ich bin. Daher lade ich ihn nicht neu, wenn der Benutzer auf ein Menü-Widget klickt, um zur selben Ansicht zu navigieren.Exakte String-Übereinstimmung mit Javascript Regex

Ich habe zwei URLs der Benutzer kann zwischen:

http://localhost/TestMVC/Larry/LarryTiles

http://localhost/TestMVC/Larry/LarryTilesList

Die URLs auch einige Hinterabfragezeichen Elemente haben kann, wie folgt aus: http://localhost/TestMVC/Larry/LarryTilesList?filterValue=servers

LarryTiles ist zu geben mir das Problem. "/ \ bLarryTiles \ b /" hat am Freitag gearbeitet (nach Antworten von anderen Fragen hier), aber das passt jetzt nicht zusammen. :)

Ich muss genau die Strings "LarryTiles" und "LarryTilesList" in diesen beiden URLs finden, aber kann nicht ganz herausfinden, wie das geht. Die URL ändert sich zwischen meinem lokalen Computer und den verschiedenen Servern, auf denen sie gehostet wird. Daher kann ich mich nicht auf die Position verlassen.

EDIT: hinzugefügt das Beispiel mit einer abschließenden Querystring, die ich vergessen hatte. Leider :(

Antwort

0

? Sie können diesen Code verwenden:

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

Dies ist anfällig für einen Schrägstrich. – jfriend00

+0

Einverstanden, aber URLs in der OP-Frage haben keinen abschließenden Schrägstrich. – anubhava

+0

Basierend auf Ihrer zuletzt bearbeiteten Frage habe ich meine Antwort aktualisiert, um Fälle wie "Schrägstrich", "Abfragezeichenfolge" usw. zu behandeln. – anubhava

2

Sie können das letzte Pfadsegment einer URL wie folgt erhalten:

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"); 

Also, Sie könnten dies tun:

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

Per neuen Informationen von OP, ich mein Beispiel aktualisiert window.location.pathname zu verwenden, um jede Abfrage-String oder Hash-Tag wird bereits vor dem Vergleich abgezogen. – jfriend00

+0

Ich teste das, aber VS und Chrome sagen beide, dass es einen Fehler in Ihrer Regex gibt. – dex3703

+0

@ dex3703 - Ja, tut mir leid, es gab einen Tippfehler, den ich behoben habe. – jfriend00

0

Scheinen, wie, was Sie Arbeiten erklärt, sonst versuchen dies: http://jsfiddle.net/Wfz9d/

haben Sie eine Fall-Empfindlichkeit Problem haben

+0

Fall ist kein Problem, obwohl dies die verwendeten URLs sind. – dex3703