Skip to content

Compiling regex produces syntactically invalid code #7891

@gajus

Description

@gajus
$ cat test.js
// @flow

const URL_RULE = /^((https?|ftp):\/\/)(\S+(:\S*)?@)?((?!10(\.\d{1,3}){3})(?!127(\.\d{1,3}){3})(?!169\.254(\.\d{1,3}){2})(?!192\.168(\.\d{1,3}){2})(?!172\.(1[6-9]|2\d|3[0-1])(\.\d{1,3}){2})([1-9]\d?|1\d\d|2[01]\d|22[0-3])(\.(1?\d{1,2}|2[0-4]\d|25[0-5])){2}(\.([1-9]\d?|1\d\d|2[0-4]\d|25[0-4]))|(([_a-z\u{00a1}-\u{ffff}0-9]+-?)*[a-z\u{00a1}-\u{ffff}0-9]+)(\.([a-z\u{00a1}-\u{ffff}0-9]+-?)*[a-z\u{00a1}-\u{ffff}0-9]+)*(\.([a-z\u{00a1}-\u{ffff}]{2,})))(:\d{2,5})?(\/[^\s]*)?$/iu;

console.log( URL_RULE.test('http://google.com/') );

$ node test.js
true

$ babel test.js | node
[stdin]:4
const URL_RULE = /^((https?|ftp):\/\/)([\0-\x08\x0E-\x1F!-\x9F\xA1-\u167F\u1681-\u1FFF\u200B-\u2027\u202A-\u202E\u2030-\u205E\u2060-\u2FFF\u3001-\uFEFE\uFF00-\u{10FFFF}]+(:[\0-\x08\x0E-\x1F!-\x9F\xA1-\u167F\u1681-\u1FFF\u200B-\u2027\u202A-\u202E\u2030-\u205E\u2060-\u2FFF\u3001-\uFEFE\uFF00-\u{10FFFF}]*)?@)?((?!10(\.[0-9]{1,3}){3})(?!127(\.[0-9]{1,3}){3})(?!169\.254(\.[0-9]{1,3}){2})(?!192\.168(\.[0-9]{1,3}){2})(?!172\.(1[6-9]|2[0-9]|3[01])(\.[0-9]{1,3}){2})([1-9][0-9]?|1[0-9][0-9]|2[01][0-9]|22[0-3])(\.(1?[0-9]{1,2}|2[0-4][0-9]|25[0-5])){2}(\.([1-9][0-9]?|1[0-9][0-9]|2[0-4][0-9]|25[0-4]))|(([0-9_a-z\xA1-\uFFFF]+\-?)*[0-9a-z\xA1-\uFFFF]+)(\.([0-9a-z\xA1-\uFFFF]+\-?)*[0-9a-z\xA1-\uFFFF]+)*(\.([a-z\xA1-\uFFFF]{2,})))(:[0-9]{2,5})?(\/[\0-\x08\x0E-\x1F!-\x9F\xA1-\u167F\u1681-\u1FFF\u200B-\u2027\u202A-\u202E\u2030-\u205E\u2060-\u2FFF\u3001-\uFEFE\uFF00-\u{10FFFF}]*)?$/iu;
                 ^

SyntaxError: Invalid regular expression: /^((https?|ftp):\/\/)([\0-\x08\x0E-\x1F!-\x9F\xA1-\u167F\u1681-\u1FFF\u200B-\u2027\u202A-\u202E\u2030-\u205E\u2060-\u2FFF\u3001-\uFEFE\uFF00-\u{10FFFF}]+(:[\0-\x08\x0E-\x1F!-\x9F\xA1-\u167F\u1681-\u1FFF\u200B-\u2027\u202A-\u202E\u2030-\u205E\u2060-\u2FFF\u3001-\uFEFE\uFF00-\u{10FFFF}]*)?@)?((?!10(\.[0-9]{1,3}){3})(?!127(\.[0-9]{1,3}){3})(?!169\.254(\.[0-9]{1,3}){2})(?!192\.168(\.[0-9]{1,3}){2})(?!172\.(1[6-9]|2[0-9]|3[01])(\.[0-9]{1,3}){2})([1-9][0-9]?|1[0-9][0-9]|2[01][0-9]|22[0-3])(\.(1?[0-9]{1,2}|2[0-4][0-9]|25[0-5])){2}(\.([1-9][0-9]?|1[0-9][0-9]|2[0-4][0-9]|25[0-4]))|(([0-9_a-z\xA1-\uFFFF]+\-?)*[0-9a-z\xA1-\uFFFF]+)(\.([0-9a-z\xA1-\uFFFF]+\-?)*[0-9a-z\xA1-\uFFFF]+)*(\.([a-z\xA1-\uFFFF]{2,})))(:[0-9]{2,5})?(\/[\0-\x08\x0E-\x1F!-\x9F\xA1-\u167F\u1681-\u1FFF\u200B-\u2027\u202A-\u202E\u2030-\u205E\u2060-\u2FFF\u3001-\uFEFE\uFF00-\u{10FFFF}]*)?$/: Invalid escape
    at [stdin]:4:18
    at Script.runInThisContext (vm.js:91:20)
    at Object.runInThisContext (vm.js:298:38)
    at Object.<anonymous> ([stdin]-wrapper:6:22)
    at Module._compile (internal/modules/cjs/loader.js:678:30)
    at evalScript (internal/bootstrap/node.js:543:27)
    at Socket.<anonymous> (internal/bootstrap/node.js:274:15)
    at Socket.emit (events.js:187:15)
    at endReadableNT (_stream_readable.js:1086:12)
    at process._tickCallback (internal/process/next_tick.js:63:19)

Babel Configuration (.babelrc, package.json, cli command)

  "presets": [
    [
      "@babel/env",
      {
        "targets": {
          "node": "current"
        }
      }
    ]
  ]
}

Expected behavior/code
A clear and concise description of what you expected to happen (or code).

Environment

  • Babel version(s): [e.g. v6.0.0, v7.0.0-beta.34]
"@babel/cli": "^7.0.0-beta.46",
"@babel/core": "^7.0.0-beta.46",
"@babel/node": "^7.0.0-beta.46",
"@babel/plugin-transform-flow-strip-types": "^7.0.0-beta.46",
"@babel/preset-env": "^7.0.0-beta.46",
"@babel/register": "^7.0.0-beta.46",

  • Node/npm version: Node v10.1.0/NPM 6

Metadata

Metadata

Assignees

No one assigned

    Type

    No type

    Projects

    No projects

    Milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions