You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
30 lines
694 B
30 lines
694 B
"use strict"; |
|
|
|
/** |
|
* RegexParser |
|
* Parses a string input. |
|
* |
|
* @name RegexParser |
|
* @function |
|
* @param {String} input The string input that should be parsed as regular |
|
* expression. |
|
* @return {RegExp} The parsed regular expression. |
|
*/ |
|
var RegexParser = module.exports = function (input) { |
|
|
|
// Validate input |
|
if (typeof input !== "string") { |
|
throw new Error("Invalid input. Input must be a string"); |
|
} |
|
|
|
// Parse input |
|
var m = input.match(/(\/?)(.+)\1([a-z]*)/i); |
|
|
|
// Invalid flags |
|
if (m[3] && !/^(?!.*?(.).*?\1)[gmixXsuUAJ]+$/.test(m[3])) { |
|
return RegExp(input); |
|
} |
|
|
|
// Create the regular expression |
|
return new RegExp(m[2], m[3]); |
|
}; |