2016-04-24 5 views
1

ich eine Winkel App, wo ein Benutzer einen regulären Ausdruck in einem Formular hinzufügen können, ein Wert wie:Javascript Speichern Regexp Schrauben das Originalformat

github\.com/([A-Za-z0-9\-\_]+)/([A-Za-z0-9\-\_]+) 

Als ich dieses Geschäft in der localstorage und ich überprüfen Sie die localstorage:

github\\\\.com\\/([A-Za-z0-9\\\\-\\\\_]+)\\/([A-Za-z0-9\\\\-\\\\_]+) 

Als ich in Javascript abrufen an anderer Stelle dieser Wert erhalte ich:

github\\.com\/([A-Za-z0-9\\-\\_]+)\/([A-Za-z0-9\\-\\_]+) 

Dies ist nicht der Original regexp und die match Methode in Javascript kann nicht funktionieren.

HINWEIS: Nach dem Absenden des Formulars, speichere ich das Objekt mit:

localStorage.myobject = JSON.stringify(myobject); 
+1

Übergeben Sie die Zeichenfolge an den RegExp-Konstruktor, nachdem Sie aus dem lokalen Speicher abrufen: 'new RegExp ('github \\. Com \/([A-Za-z0-9 \\ - \\ _) +) \/([ A-Za-z0-9 \\ - \\ _] +)) '. –

Antwort

1

Sie können hier von overescaping loszuwerden, nur

github[.]com/([A-Za-z0-9_-]+)/([A-Za-z0-9_-]+) 

und initialisieren es über einen RegExp Konstruktor verwenden, um Um dem Regex-Delimiter / nicht ausweichen zu müssen. Ein Punkt innerhalb [] verliert seine spezielle Bedeutung und entspricht nur einem Literal Punkt, der Bindestrich am Ende der Zeichenklasse entspricht nur einem Literal Bindestrich, und die _ muss überhaupt nirgends im Muster maskiert werden:

var tst = "github.com/Test1-Text/Test2"; 
 
var pattern = "github[.]com/([A-Za-z0-9_-]+)/([A-Za-z0-9_-]+)"; 
 
console.log(new RegExp(pattern).test(tst));

UPDATE:

Wenn Muster aus anderen Quellen verwenden, müssen Sie den Konstruktor Notation verwenden. Stellen Sie sicher, dass Ihre Regex-Muster als Literalzeichenfolgen gespeichert sind (wenn Sie hatten, stellen Sie sicher, dass es als C:\\Folder gespeichert ist), und wenn Sie den Wert darin lesen, wird automatisch mit dem RegExp-Konstruktor verwendbar sein.

+0

Dieses ** ist ** ein Trick, um dieses spezielle Problem zu lösen, aber gibt es eine Möglichkeit, mit allgemeinen Zeichenfolgen mit '' '' s umzugehen? : / –