30 lines
660 B
JavaScript
30 lines
660 B
JavaScript
|
'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;
|
||
|
};
|