UNPKG

diet-yadda

Version:

A true BDD framework for JavaScript - slimmed down

73 lines (61 loc) 2.23 kB
/* * Copyright 2010 Acuminous Ltd / Energized Work Ltd * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ /* jslint node: true */ "use strict"; var $ = require('./Array'); // Wrapper for JavaScript Regular Expressions var RegularExpression = function(pattern_or_regexp) { var groups_pattern = /(^|[^\\\\])\(.*?\)/g; var sets_pattern = /(^|[^\\\\])\[.*?\]/g; var repetitions_pattern = /(^|[^\\\\])\{.*?\}/g; var regex_aliases_pattern = /(^|[^\\\\])\\./g; var non_word_tokens_pattern = /[^\w\s]/g; var regexp = new RegExp(pattern_or_regexp); this.test = function(text) { var result = regexp.test(text); this.reset(); return result; }; this.groups = function(text) { var results = $(); var match = regexp.exec(text); while (match) { var groups = match.slice(1, match.length); results.push(groups); match = regexp.global && regexp.exec(text); } this.reset(); return results.flatten(); }; this.reset = function() { regexp.lastIndex = 0; return this; }; this.without_expressions = function() { return regexp.source.replace(groups_pattern, '$1') .replace(sets_pattern, '$1') .replace(repetitions_pattern, '$1') .replace(regex_aliases_pattern, '$1') .replace(non_word_tokens_pattern, ''); }; this.equals = function(other) { return this.toString() == other.toString(); }; this.toString = function() { return "/" + regexp.source + "/"; }; }; module.exports = RegularExpression;