123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172 |
- 'use strict';
- var extend = require('extend-shallow');
- var safe = require('safe-regex');
- function toRegex(pattern, options) {
- return new RegExp(toRegex.create(pattern, options));
- }
- 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;
- };
- module.exports = toRegex;
|