More chars that cannot be unescaped in regexps.

This commit is contained in:
Mihai Bazon
2014-01-21 11:44:00 +02:00
parent 1d0127de21
commit 931862e97f

View File

@@ -1118,6 +1118,34 @@ function OutputStream(options) {
DEFPRINT(AST_Number, function(self, output){ DEFPRINT(AST_Number, function(self, output){
output.print(make_num(self.getValue())); output.print(make_num(self.getValue()));
}); });
function regexp_safe_literal(code) {
return [
0x5c , // \
0x2f , // /
0x2e , // .
0x2b , // +
0x2a , // *
0x3f , // ?
0x28 , // (
0x29 , // )
0x5b , // [
0x5d , // ]
0x7b , // {
0x7d , // }
0x24 , // $
0x5e , // ^
0x3a , // :
0x7c , // |
0x21 , // !
0x0a , // \n
0x0d , // \r
0xfeff , // Unicode BOM
0x2028 , // unicode "line separator"
0x2029 , // unicode "paragraph separator"
].indexOf(code) < 0;
};
DEFPRINT(AST_RegExp, function(self, output){ DEFPRINT(AST_RegExp, function(self, output){
var str = self.getValue().toString(); var str = self.getValue().toString();
if (output.option("ascii_only")) { if (output.option("ascii_only")) {
@@ -1126,7 +1154,7 @@ function OutputStream(options) {
str = str.split("\\\\").map(function(str){ str = str.split("\\\\").map(function(str){
return str.replace(/\\u[0-9a-fA-F]{4}|\\x[0-9a-fA-F]{2}/g, function(s){ return str.replace(/\\u[0-9a-fA-F]{4}|\\x[0-9a-fA-F]{2}/g, function(s){
var code = parseInt(s.substr(2), 16); var code = parseInt(s.substr(2), 16);
return code == 0xfeff || code == 0x2f || code == 10 || code == 13 || code == 0x2028 || code == 0x2029 ? s : String.fromCharCode(code); return regexp_safe_literal(code) ? String.fromCharCode(code) : s;
}); });
}).join("\\\\"); }).join("\\\\");
} }