2017-04-01 12 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; }

関連する問題