|
|
- 'use strict';
-
- var has = require('has');
- var regexExec = RegExp.prototype.exec;
- var gOPD = Object.getOwnPropertyDescriptor;
-
- var tryRegexExecCall = function tryRegexExec(value) {
- try {
- var lastIndex = value.lastIndex;
- value.lastIndex = 0;
-
- regexExec.call(value);
- return true;
- } catch (e) {
- return false;
- } finally {
- value.lastIndex = lastIndex;
- }
- };
- var toStr = Object.prototype.toString;
- var regexClass = '[object RegExp]';
- var hasToStringTag = typeof Symbol === 'function' && typeof Symbol.toStringTag === 'symbol';
-
- module.exports = function isRegex(value) {
- if (!value || typeof value !== 'object') {
- return false;
- }
- if (!hasToStringTag) {
- return toStr.call(value) === regexClass;
- }
-
- var descriptor = gOPD(value, 'lastIndex');
- var hasLastIndexDataProperty = descriptor && has(descriptor, 'value');
- if (!hasLastIndexDataProperty) {
- return false;
- }
-
- return tryRegexExecCall(value);
- };
|