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
4 years ago
|
"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]);
|
||
|
};
|