[英]Javascript String to Regex without Escaping
我对nodejs / 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
我是否缺少简单的东西? 如果没有任何建议给我? 谢谢
在new 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);
.as-console-wrapper { max-height: 100% !important; top: 0; }
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.