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.
29 lines
660 B
29 lines
660 B
'use strict'; |
|
const isRegexp = require('is-regexp'); |
|
|
|
const flagMap = { |
|
global: 'g', |
|
ignoreCase: 'i', |
|
multiline: 'm', |
|
dotAll: 's', |
|
sticky: 'y', |
|
unicode: 'u' |
|
}; |
|
|
|
module.exports = (regexp, options = {}) => { |
|
if (!isRegexp(regexp)) { |
|
throw new TypeError('Expected a RegExp instance'); |
|
} |
|
|
|
const flags = Object.keys(flagMap).map(flag => ( |
|
(typeof options[flag] === 'boolean' ? options[flag] : regexp[flag]) ? flagMap[flag] : '' |
|
)).join(''); |
|
|
|
const clonedRegexp = new RegExp(options.source || regexp.source, flags); |
|
|
|
clonedRegexp.lastIndex = typeof options.lastIndex === 'number' ? |
|
options.lastIndex : |
|
regexp.lastIndex; |
|
|
|
return clonedRegexp; |
|
};
|
|
|