Javascript 从正则表达式文本获取正则表达式字符串表示的最佳方法
如果我这样做:Javascript 从正则表达式文本获取正则表达式字符串表示的最佳方法,javascript,regex,parsing,Javascript,Regex,Parsing,如果我这样做: // note that \x1f is a control character var regex = new RegExp("\x1f"); // prints "//" console.log(regex.toString()); 如果我这样做: var regex = /\\x1f/; // prints "/\\x1f/" console.log(regex.toString()); 我希望能够从第二个正则表达式中获得第一个结果(/-带控制字符的字符串)。有没
// note that \x1f is a control character
var regex = new RegExp("\x1f");
// prints "//"
console.log(regex.toString());
如果我这样做:
var regex = /\\x1f/;
// prints "/\\x1f/"
console.log(regex.toString());
我希望能够从第二个正则表达式中获得第一个结果(/
-带控制字符的字符串)。有没有一个简单的方法可以做到这一点?到目前为止,我只能通过一个恶心的eval
hack来做到这一点:
var regexValue=/\\x1f/.toString();
让escapedLiteral=regexValue
//将双反斜杠(\\)转换为单反斜杠(\),
.replace(/\\\/g,“\\\”)
//删除开始和结束前斜杠(/)。
//这需要更加智能-如果有标志怎么办?
.切片(1,-1);
//可能存在无效的正则表达式字符串
试一试{
regexValue=eval('newregexp(“+escapedLiteral+”)).toString();
}捕获(e){
regexValue=null;
}
//应打印“/”
文件写入(regexValue)代码>首先,/\\x1f/
与newregexp(“\x1f”)
不同,它是newregexp(“\\\\x1f”)
其次,如果您正在执行eval hack,您可以将正则表达式的字符串表示形式反馈给eval:
var x = /\x1f/;
console.log(eval(''+x));
第三,有很多JavaScript解析库,比如esprima、espree或babylon。我建议使用其中之一,或者至少研究一下它们的源代码
要快速避免eval黑客攻击,您可以执行以下操作:
var literalStr = "/abc/gi";
var m = /^\/(.*)\/([a-z]*)$/.exec(literalStr);
var regexObj = m ? new RegExp(m[1], m[2]) : null;
console.log(regexObj);
或者
你试过了吗.source?@you它看起来像。source
给出了与.toString()
相同的结果。谢谢,我应该意识到我的两个正则表达式是不同的。这就完全不同了。
/\x1f/.toString().replace(/\\x(..)/g,
function(a, b) {return a.replace("\\x" + b, String.fromCharCode(b));}
);