2016-04-24 51 views
1

我有一個角度的應用,其中用戶可以在表單添加的正則表達式,一個值,如:的Javascript貯藏正則表達式螺釘原始格式

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

當我其存儲在localStorage的和餘檢查localStorage的:

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

當我在Javascript中檢索別處這個值,我得到:

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

這不是原始正則表達式和Javascript中的match方法無法工作。

注:提交表單後,我存儲對象有:

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

從localstorage獲取後,將字符串傳遞給RegExp構造函數:'new RegExp('github \\。com \ /([A-Za-z0-9 \\ - \\ _] +)\ /([ A-ZA-Z0-9 \\ - \\ _] +))'。 –

回答

1

可以擺脫overescaping這裏,只需用

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

,並通過RegExp構造,從而對其進行初始化不必逃避正則表達式分隔符/[]中的點失去其特殊含義並且僅與字面點匹配,字符類末尾的連字符只與文字連字符匹配,並且_不必在該圖案中的任何位置都逃脫:

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

當使用來自外部源的模式,你需要使用的構造函數符號。確保您的正則表達式模式存儲爲文字字符串(如果您有RegExp("C:\\\\Folder"),請確保它存儲爲C:\\Folder),並且在讀取其中的值時將自動與RegExp構造函數一起使用。

+0

這是一個解決這個問題的技巧,但是有沒有辦法用''''處理一般的字符串呢? :/ –