aboutsummaryrefslogtreecommitdiff
path: root/node_modules/regex-not/index.js
diff options
context:
space:
mode:
Diffstat (limited to 'node_modules/regex-not/index.js')
-rw-r--r--node_modules/regex-not/index.js72
1 files changed, 72 insertions, 0 deletions
diff --git a/node_modules/regex-not/index.js b/node_modules/regex-not/index.js
new file mode 100644
index 0000000..02bfed4
--- /dev/null
+++ b/node_modules/regex-not/index.js
@@ -0,0 +1,72 @@
+'use strict';
+
+var extend = require('extend-shallow');
+var safe = require('safe-regex');
+
+/**
+ * The main export is a function that takes a `pattern` string and an `options` object.
+ *
+ * ```js
+ & var not = require('regex-not');
+ & console.log(not('foo'));
+ & //=> /^(?:(?!^(?:foo)$).)*$/
+ * ```
+ *
+ * @param {String} `pattern`
+ * @param {Object} `options`
+ * @return {RegExp} Converts the given `pattern` to a regex using the specified `options`.
+ * @api public
+ */
+
+function toRegex(pattern, options) {
+ return new RegExp(toRegex.create(pattern, options));
+}
+
+/**
+ * Create a regex-compatible string from the given `pattern` and `options`.
+ *
+ * ```js
+ & var not = require('regex-not');
+ & console.log(not.create('foo'));
+ & //=> '^(?:(?!^(?:foo)$).)*$'
+ * ```
+ * @param {String} `pattern`
+ * @param {Object} `options`
+ * @return {String}
+ * @api public
+ */
+
+toRegex.create = function(pattern, options) {
+ if (typeof pattern !== 'string') {
+ throw new TypeError('expected a string');
+ }
+
+ var opts = extend({}, options);
+ if (opts.contains === true) {
+ opts.strictNegate = false;
+ }
+
+ var open = opts.strictOpen !== false ? '^' : '';
+ var close = opts.strictClose !== false ? '$' : '';
+ var endChar = opts.endChar ? opts.endChar : '+';
+ var str = pattern;
+
+ if (opts.strictNegate === false) {
+ str = '(?:(?!(?:' + pattern + ')).)' + endChar;
+ } else {
+ str = '(?:(?!^(?:' + pattern + ')$).)' + endChar;
+ }
+
+ var res = open + str + close;
+ if (opts.safe === true && safe(res) === false) {
+ throw new Error('potentially unsafe regular expression: ' + res);
+ }
+
+ return res;
+};
+
+/**
+ * Expose `toRegex`
+ */
+
+module.exports = toRegex;