2017-04-01 109 views
0

我有一個關於nodejs/javascript中的正則表達式的問題。正則表達式的Javascript字符串沒有轉義

我想要實現的是將正則表達式(從數據庫加載爲字符串)轉換爲js中的RegExp對象。

var regex  = /Apache\/([0-9\.]+) \(([a-zA-Z ]+)\) (.+)/; 
var regexString = '/Apache\/([0-9\.]+) \(([a-zA-Z ]+)\) (.+)/'; 

var str = 'Apache/2.2.9 (Debian) PHP/5.2.6-1+lenny18'; 

var match = str.match(regex); 
var match2 = str.match(new RegExp(regexString)); 
console.log(match); 
console.log(match2); 

這就是我到目前爲止的嘗試。但是,正如你可以看到,如果字符串被逃脫它不會匹配...... 我的輸出:

[ 'Apache/2.2.9 (Debian) PHP/5.2.6-1+lenny18', 
    '2.2.9', 
    'Debian', 
    'PHP/5.2.6-1+lenny18', 
    index: 0, 
    input: 'Apache/2.2.9 (Debian) PHP/5.2.6-1+lenny18' ] 
null 

我失去了一些東西簡單?如果對我沒有任何建議? 謝謝

回答

2

當在new RegExp()的字符串參數中使用時,不應該存在兩個邊界/

此外,當你會寫字符串作爲文字(我的理解是不是真的你的情況,因爲你從DB串),你需要逃避任何反斜線在字面來\\

var regex  = /Apache\/([0-9\.]+) \(([a-zA-Z ]+)\) (.+)/; 
 
var regexString = 'Apache\/([0-9\.]+) \\(([a-zA-Z ]+)\\) (.+)'; 
 

 
var str = 'Apache/2.2.9 (Debian) PHP/5.2.6-1+lenny18'; 
 

 
var match = str.match(regex); 
 
var match2 = str.match(new RegExp(regexString)); 
 
console.log(match); 
 
console.log(match2);
.as-console-wrapper { max-height: 100% !important; top: 0; }

相關問題