【发布时间】:2016-03-29 22:00:10
【问题描述】:
如果我这样做:
// 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();
let escapedLiteral = regexValue
// turn double backslashes (\\) into single backslashes (\),
.replace(/\\\\/g, '\\')
// remove the opening and closing forward slashes (/).
// this needs to be more intelligent - what if there are flags?
.slice(1, -1);
// there could be an invalid regular expression string
try {
regexValue = eval('new RegExp("' + escapedLiteral + '")').toString();
} catch (e) {
regexValue = null;
}
// should print "//"
document.writeln(regexValue);
我正在做一些 JavaScript 源代码解析,这种差异使事情变得具有挑战性。
【问题讨论】:
-
你试过.source吗?
-
@YOU 看起来
.source的结果与.toString()相同。
标签: javascript regex parsing