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

相关问题