11/*!
2- * XRegExp.matchRecursive 3.1.0
2+ * XRegExp.matchRecursive 3.1.1-dev
33 * <xregexp.com>
44 * Steven Levithan (c) 2009-2016 MIT License
55 */
66
77module . exports = function ( XRegExp ) {
88 'use strict' ;
99
10- /**
11- * Returns a match detail object composed of the provided values.
12- *
13- * @private
14- */
10+ /**
11+ * Returns a match detail object composed of the provided values.
12+ */
1513 function row ( name , value , start , end ) {
1614 return {
1715 name : name ,
@@ -21,56 +19,55 @@ module.exports = function(XRegExp) {
2119 } ;
2220 }
2321
24- /**
25- * Returns an array of match strings between outermost left and right delimiters, or an array of
26- * objects with detailed match parts and position data. An error is thrown if delimiters are
27- * unbalanced within the data.
28- *
29- * @memberOf XRegExp
30- * @param {String } str String to search.
31- * @param {String } left Left delimiter as an XRegExp pattern.
32- * @param {String } right Right delimiter as an XRegExp pattern.
33- * @param {String } [flags] Any native or XRegExp flags, used for the left and right delimiters.
34- * @param {Object } [options] Lets you specify `valueNames` and `escapeChar` options.
35- * @returns {Array } Array of matches, or an empty array.
36- * @example
37- *
38- * // Basic usage
39- * var str = '(t((e))s)t()(ing)';
40- * XRegExp.matchRecursive(str, '\\(', '\\)', 'g');
41- * // -> ['t((e))s', '', 'ing']
42- *
43- * // Extended information mode with valueNames
44- * str = 'Here is <div> <div>an</div></div> example';
45- * XRegExp.matchRecursive(str, '<div\\s*>', '</div>', 'gi', {
46- * valueNames: ['between', 'left', 'match', 'right']
47- * });
48- * // -> [
49- * // {name: 'between', value: 'Here is ', start: 0, end: 8},
50- * // {name: 'left', value: '<div>', start: 8, end: 13},
51- * // {name: 'match', value: ' <div>an</div>', start: 13, end: 27},
52- * // {name: 'right', value: '</div>', start: 27, end: 33},
53- * // {name: 'between', value: ' example', start: 33, end: 41}
54- * // ]
55- *
56- * // Omitting unneeded parts with null valueNames, and using escapeChar
57- * str = '...{1}.\\{{function(x,y){return {y:x}}}';
58- * XRegExp.matchRecursive(str, '{', '}', 'g', {
59- * valueNames: ['literal', null, 'value', null],
60- * escapeChar: '\\'
61- * });
62- * // -> [
63- * // {name: 'literal', value: '...', start: 0, end: 3},
64- * // {name: 'value', value: '1', start: 4, end: 5},
65- * // {name: 'literal', value: '.\\{', start: 6, end: 9},
66- * // {name: 'value', value: 'function(x,y){return {y:x}}', start: 10, end: 37 }
67- * // ]
68- *
69- * // Sticky mode via flag y
70- * str = '<1><<<2>>><3>4<5>';
71- * XRegExp.matchRecursive(str, '<', '>', 'gy');
72- * // -> ['1', '<<2>>', '3']
73- */
22+ /**
23+ * Returns an array of match strings between outermost left and right delimiters, or an array of
24+ * objects with detailed match parts and position data. An error is thrown if delimiters are
25+ * unbalanced within the data.
26+ *
27+ * @param {String } str String to search.
28+ * @param {String } left Left delimiter as an XRegExp pattern.
29+ * @param {String } right Right delimiter as an XRegExp pattern.
30+ * @param {String } [flags] Any native or XRegExp flags, used for the left and right delimiters.
31+ * @param {Object } [options] Lets you specify `valueNames` and `escapeChar` options.
32+ * @returns {Array } Array of matches, or an empty array.
33+ * @example
34+ *
35+ * // Basic usage
36+ * var str = '(t((e))s)t()(ing)';
37+ * XRegExp.matchRecursive(str, '\\(', '\\)', 'g');
38+ * // -> ['t((e))s', '', 'ing']
39+ *
40+ * // Extended information mode with valueNames
41+ * str = 'Here is <div> <div>an</div></div> example';
42+ * XRegExp.matchRecursive(str, '<div\\s*>', '</div>', 'gi', {
43+ * valueNames: ['between', 'left', 'match', 'right']
44+ * });
45+ * // -> [
46+ * // {name: 'between', value: 'Here is ', start: 0, end: 8},
47+ * // {name: 'left', value: '<div>', start: 8, end: 13},
48+ * // {name: 'match', value: ' <div>an</div>', start: 13, end: 27},
49+ * // {name: 'right', value: '</div>', start: 27, end: 33},
50+ * // {name: 'between', value: ' example', start: 33, end: 41}
51+ * // ]
52+ *
53+ * // Omitting unneeded parts with null valueNames, and using escapeChar
54+ * str = '...{1}.\\{{function(x,y){return {y:x}}}';
55+ * XRegExp.matchRecursive(str, '{', '}', 'g', {
56+ * valueNames: ['literal', null, 'value', null],
57+ * escapeChar: '\\'
58+ * });
59+ * // -> [
60+ * // {name: 'literal', value: '...', start: 0, end: 3},
61+ * // {name: 'value', value: '1', start: 4, end: 5},
62+ * // {name: 'literal', value: '.\\{', start: 6, end: 9},
63+ * // {name: 'value', value: 'function(x,y){return {y:x}}', start: 10, end: 37 }
64+ * // ]
65+ *
66+ * // Sticky mode via flag y
67+ * str = '<1><<<2>>><3>4<5>';
68+ * XRegExp.matchRecursive(str, '<', '>', 'gy');
69+ * // -> ['1', '<<2>>', '3']
70+ */
7471 XRegExp . matchRecursive = function ( str , left , right , flags , options ) {
7572 flags = flags || '' ;
7673 options = options || { } ;
0 commit comments