2012-03-29 11 views
2

Ich habe eine Anwendung, die Strings analysiert und über jQuery an ein Popup-Fenster übergibt. Einige der Zeichenfolgen, die ich übergebe, enthalten ein Feld für Webadressen ODER interne C: Laufwerkpositionen. Wenn ich die Zeichenfolge an das Fenster übergebe, wird der umgekehrte Schrägstrich ("\") aus dem Windows-Pfad entfernt (die Webadressen, die den Vorwärtsschub verwenden, sind natürlich kein Problem. Ich versuche, diese Zeichenfolgen als Links zu übergeben, also Der Benutzer kann einfach auf den Link klicken und los geht's. Offensichtlich, wenn die Backslashes entfernt sind, funktioniert der Link nicht. Wie zum Teufel teste ich das? Ich habe ein paar einfache Regexes ausprobiert, die nicht funktionieren.Probleme Original-Backslashes beim Übergeben von URL

EDIT: Die Zeichenfolgen, die ich analysiere kommen aus einer Sharepoint Liste von Anwendungen, und ich habe keine Kontrolle über ihr Format, sie sind einfach in die Liste als "\ Laufwerk \ then \ the \ Pfad \ zu \ the \ datei ". Mein Verständnis ist, dass ich überprüfen muss, ob es einen Backslash gibt, dann entkomme es durch einen weiteren Backslash. Aber wie?

EDIT 2: Gut zu wissen, dass ich auf dem richtigen Weg war. Nach dem, was ich im Internet gelesen hatte, hatte ich gedacht, dass es etwas in dieser Richtung war. Allerdings kann ich das immer noch nicht zur Arbeit bringen. Vielleicht Leute könnten Sie mir helfen ....

Ich packte haben das Feld von der Sharepoint-Liste wie folgt aus (Sharepoint speichert Feldnamen mit dem Präfix ‚ows_‘:

var devPath = "<a class='h_link' href='"+$(this).attr('ows_DEVPathURLServer')+"'>"+$(this).attr('ows_DEVPathURLServer')+"</a>"; 

Dies funktioniert gut für .. Web-URLs, wie gesagt

Also dann verwirrte ich um mit einem .replace tun (/ \/g, ‚\\‘) ;, aber es wird nicht ausgeführt Also dachte ich, ich würde versuchen:

 var unregged = $(this).attr('ows_DEVPathURLServer'); 
     var regged = unregged.toString().split('\\').join('\\\\'); 
     alert(regged); 
     var devPath = "<a class='h_link' href='"+regged+"'>"+regged+"</a>"; 

Nur um meine t zu brechen Hought-Prozess. Funktioniert nicht. Was vermisse ich?

Danke!

+0

Sie könnten die Pfade codieren (window.encodeURIComponent), bevor Sie sie übergeben. – reedlauber

+0

Als eine ziemlich große newb (lese 'Student'), ich bin nicht vertraut mit diesem. Wie würde ich darüber gehen? – mrwienerdog

+0

Überlegen Sie, Titel der Frage zu ändern (und vielleicht auch Tags), um darzustellen, um welche Frage es sich handelt. Sieh nicht wirklich, wie es mit "Regex-Problemen" zusammenhängt –

Antwort

2

Sie können einfach prüfen, ob es sich um einen "lokalen" Standort handelt, und ihn in File URI scheme konvertieren, bevor Sie ihn weiterleiten.

So etwas kann den Trick:

var localPathRegex = /^\\(\w)\\/i; 
if (localPathRegex.test(url)){ 
    url = url.replace(localPathRegex, 'file:///$1:/').replace(/\\/g, '/'); 
} 

Dies sollte \d\then\the\path\to\the\file konvertieren file:///d:/then/the/path/to/the/file

+0

Versucht dies, danke, immer noch nicht funktioniert. Alle Schrägstriche werden entfernt. Anstelle des ursprünglichen '\\ d \ Pfad \ zu \ meiner \ Datei' bekomme ich immer '\ dthenpathtomyfile' was ich bekomme wenn ich überhaupt nichts versuche ...... – mrwienerdog

+0

@mrwienerdog, ich ' Ich habe im ersten Codebeispiel einen Fehler gemacht, der jetzt behoben werden sollte –

2

Sie müssen Ihre Backslashes mit einem anderen Backslash umgehen. Ihre vergangen url würde wie folgt aussehen:

c: \\ mydrive \\ MyFolder

+0

Danke Levi. Ich habe meinen Beitrag bearbeitet, da ich denke, dass ich nicht ganz so klar war, wie ich es hätte sein sollen. – mrwienerdog

2

Um "doppelte" jeder Backslash Sie tun können:

myString.replace(/\\/g, '\\\\') 

Bitte beachten Sie als jedes Mal, wenn Sie siehe zwei Backslash im Code, es ist tatsächlich einer, da wir sie auch in unserem Code entkommen müssen.

die g bedeutet Global Ersatz, wenn Sie mehrere \ haben, werden sie alle ersetzt werden.

3

Hier ist eine schnelle, regex-less, eine Zeile Lösung:

myString.split('\\').join('\\\\');//replaces all backslashes with double backslashes. 

regexp Verwendung Hier ist einfach zu viel ...