michael@0: /* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ michael@0: /* This Source Code Form is subject to the terms of the Mozilla Public michael@0: * License, v. 2.0. If a copy of the MPL was not distributed with this michael@0: * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ michael@0: michael@0: /* michael@0: * michael@0: * Date: 2002-07-07 michael@0: * SUMMARY: Testing JS RegExp engine against Perl 5 RegExp engine. michael@0: * Adjust cnLBOUND, cnUBOUND below to restrict which sections are tested. michael@0: * michael@0: * This test was created by running various patterns and strings through the michael@0: * Perl 5 RegExp engine. We saved the results below to test the JS engine. michael@0: * michael@0: * NOTE: ECMA/JS and Perl do differ on certain points. We have either commented michael@0: * out such sections altogether, or modified them to fit what we expect from JS. michael@0: * michael@0: * EXAMPLES: michael@0: * michael@0: * - In JS, regexp captures (/(a) etc./) must hold |undefined| if not used. michael@0: * See http://bugzilla.mozilla.org/show_bug.cgi?id=123437. michael@0: * By contrast, in Perl, unmatched captures hold the empty string. michael@0: * We have modified such sections accordingly. Example: michael@0: michael@0: pattern = /^([^a-z])|(\^)$/; michael@0: string = '.'; michael@0: actualmatch = string.match(pattern); michael@0: //expectedmatch = Array('.', '.', ''); <<<--- Perl michael@0: expectedmatch = Array('.', '.', undefined); <<<--- JS michael@0: addThis(); michael@0: michael@0: michael@0: * - In JS, you can't refer to a capture before it's encountered & completed michael@0: * michael@0: * - Perl supports ] & ^] inside a [], ECMA does not michael@0: * michael@0: * - ECMA does support (?: (?= and (?! operators, but doesn't support (?< etc. michael@0: * michael@0: * - ECMA doesn't support (?imsx or (?-imsx michael@0: * michael@0: * - ECMA doesn't support (?(condition) michael@0: * michael@0: * - Perl has \Z has end-of-line, ECMA doesn't michael@0: * michael@0: * - In ECMA, ^ matches only the empty string before the first character michael@0: * michael@0: * - In ECMA, $ matches only the empty string at end of input (unless multiline) michael@0: * michael@0: * - ECMA spec says that each atom in a range must be a single character michael@0: * michael@0: * - ECMA doesn't support \A michael@0: * michael@0: * - ECMA doesn't have rules for [: michael@0: * michael@0: */ michael@0: //----------------------------------------------------------------------------- michael@0: var i = 0; michael@0: var BUGNUMBER = 85721; michael@0: var summary = 'Testing regular expression edge cases'; michael@0: var cnSingleSpace = ' '; michael@0: var status = ''; michael@0: var statusmessages = new Array(); michael@0: var pattern = ''; michael@0: var patterns = new Array(); michael@0: var string = ''; michael@0: var strings = new Array(); michael@0: var actualmatch = ''; michael@0: var actualmatches = new Array(); michael@0: var expectedmatch = ''; michael@0: var expectedmatches = new Array(); michael@0: var cnLBOUND = 1; michael@0: var cnUBOUND = 1000; michael@0: michael@0: michael@0: status = inSection(1); michael@0: pattern = /abc/; michael@0: string = 'abc'; michael@0: actualmatch = string.match(pattern); michael@0: expectedmatch = Array('abc'); michael@0: addThis(); michael@0: michael@0: status = inSection(2); michael@0: pattern = /abc/; michael@0: string = 'xabcy'; michael@0: actualmatch = string.match(pattern); michael@0: expectedmatch = Array('abc'); michael@0: addThis(); michael@0: michael@0: status = inSection(3); michael@0: pattern = /abc/; michael@0: string = 'ababc'; michael@0: actualmatch = string.match(pattern); michael@0: expectedmatch = Array('abc'); michael@0: addThis(); michael@0: michael@0: status = inSection(4); michael@0: pattern = /ab*c/; michael@0: string = 'abc'; michael@0: actualmatch = string.match(pattern); michael@0: expectedmatch = Array('abc'); michael@0: addThis(); michael@0: michael@0: status = inSection(5); michael@0: pattern = /ab*bc/; michael@0: string = 'abc'; michael@0: actualmatch = string.match(pattern); michael@0: expectedmatch = Array('abc'); michael@0: addThis(); michael@0: michael@0: status = inSection(6); michael@0: pattern = /ab*bc/; michael@0: string = 'abbc'; michael@0: actualmatch = string.match(pattern); michael@0: expectedmatch = Array('abbc'); michael@0: addThis(); michael@0: michael@0: status = inSection(7); michael@0: pattern = /ab*bc/; michael@0: string = 'abbbbc'; michael@0: actualmatch = string.match(pattern); michael@0: expectedmatch = Array('abbbbc'); michael@0: addThis(); michael@0: michael@0: status = inSection(8); michael@0: pattern = /.{1}/; michael@0: string = 'abbbbc'; michael@0: actualmatch = string.match(pattern); michael@0: expectedmatch = Array('a'); michael@0: addThis(); michael@0: michael@0: status = inSection(9); michael@0: pattern = /.{3,4}/; michael@0: string = 'abbbbc'; michael@0: actualmatch = string.match(pattern); michael@0: expectedmatch = Array('abbb'); michael@0: addThis(); michael@0: michael@0: status = inSection(10); michael@0: pattern = /ab{0,}bc/; michael@0: string = 'abbbbc'; michael@0: actualmatch = string.match(pattern); michael@0: expectedmatch = Array('abbbbc'); michael@0: addThis(); michael@0: michael@0: status = inSection(11); michael@0: pattern = /ab+bc/; michael@0: string = 'abbc'; michael@0: actualmatch = string.match(pattern); michael@0: expectedmatch = Array('abbc'); michael@0: addThis(); michael@0: michael@0: status = inSection(12); michael@0: pattern = /ab+bc/; michael@0: string = 'abbbbc'; michael@0: actualmatch = string.match(pattern); michael@0: expectedmatch = Array('abbbbc'); michael@0: addThis(); michael@0: michael@0: status = inSection(13); michael@0: pattern = /ab{1,}bc/; michael@0: string = 'abbbbc'; michael@0: actualmatch = string.match(pattern); michael@0: expectedmatch = Array('abbbbc'); michael@0: addThis(); michael@0: michael@0: status = inSection(14); michael@0: pattern = /ab{1,3}bc/; michael@0: string = 'abbbbc'; michael@0: actualmatch = string.match(pattern); michael@0: expectedmatch = Array('abbbbc'); michael@0: addThis(); michael@0: michael@0: status = inSection(15); michael@0: pattern = /ab{3,4}bc/; michael@0: string = 'abbbbc'; michael@0: actualmatch = string.match(pattern); michael@0: expectedmatch = Array('abbbbc'); michael@0: addThis(); michael@0: michael@0: status = inSection(16); michael@0: pattern = /ab?bc/; michael@0: string = 'abbc'; michael@0: actualmatch = string.match(pattern); michael@0: expectedmatch = Array('abbc'); michael@0: addThis(); michael@0: michael@0: status = inSection(17); michael@0: pattern = /ab?bc/; michael@0: string = 'abc'; michael@0: actualmatch = string.match(pattern); michael@0: expectedmatch = Array('abc'); michael@0: addThis(); michael@0: michael@0: status = inSection(18); michael@0: pattern = /ab{0,1}bc/; michael@0: string = 'abc'; michael@0: actualmatch = string.match(pattern); michael@0: expectedmatch = Array('abc'); michael@0: addThis(); michael@0: michael@0: status = inSection(19); michael@0: pattern = /ab?c/; michael@0: string = 'abc'; michael@0: actualmatch = string.match(pattern); michael@0: expectedmatch = Array('abc'); michael@0: addThis(); michael@0: michael@0: status = inSection(20); michael@0: pattern = /ab{0,1}c/; michael@0: string = 'abc'; michael@0: actualmatch = string.match(pattern); michael@0: expectedmatch = Array('abc'); michael@0: addThis(); michael@0: michael@0: status = inSection(21); michael@0: pattern = /^abc$/; michael@0: string = 'abc'; michael@0: actualmatch = string.match(pattern); michael@0: expectedmatch = Array('abc'); michael@0: addThis(); michael@0: michael@0: status = inSection(22); michael@0: pattern = /^abc/; michael@0: string = 'abcc'; michael@0: actualmatch = string.match(pattern); michael@0: expectedmatch = Array('abc'); michael@0: addThis(); michael@0: michael@0: status = inSection(23); michael@0: pattern = /abc$/; michael@0: string = 'aabc'; michael@0: actualmatch = string.match(pattern); michael@0: expectedmatch = Array('abc'); michael@0: addThis(); michael@0: michael@0: status = inSection(24); michael@0: pattern = /^/; michael@0: string = 'abc'; michael@0: actualmatch = string.match(pattern); michael@0: expectedmatch = Array(''); michael@0: addThis(); michael@0: michael@0: status = inSection(25); michael@0: pattern = /$/; michael@0: string = 'abc'; michael@0: actualmatch = string.match(pattern); michael@0: expectedmatch = Array(''); michael@0: addThis(); michael@0: michael@0: status = inSection(26); michael@0: pattern = /a.c/; michael@0: string = 'abc'; michael@0: actualmatch = string.match(pattern); michael@0: expectedmatch = Array('abc'); michael@0: addThis(); michael@0: michael@0: status = inSection(27); michael@0: pattern = /a.c/; michael@0: string = 'axc'; michael@0: actualmatch = string.match(pattern); michael@0: expectedmatch = Array('axc'); michael@0: addThis(); michael@0: michael@0: status = inSection(28); michael@0: pattern = /a.*c/; michael@0: string = 'axyzc'; michael@0: actualmatch = string.match(pattern); michael@0: expectedmatch = Array('axyzc'); michael@0: addThis(); michael@0: michael@0: status = inSection(29); michael@0: pattern = /a[bc]d/; michael@0: string = 'abd'; michael@0: actualmatch = string.match(pattern); michael@0: expectedmatch = Array('abd'); michael@0: addThis(); michael@0: michael@0: status = inSection(30); michael@0: pattern = /a[b-d]e/; michael@0: string = 'ace'; michael@0: actualmatch = string.match(pattern); michael@0: expectedmatch = Array('ace'); michael@0: addThis(); michael@0: michael@0: status = inSection(31); michael@0: pattern = /a[b-d]/; michael@0: string = 'aac'; michael@0: actualmatch = string.match(pattern); michael@0: expectedmatch = Array('ac'); michael@0: addThis(); michael@0: michael@0: status = inSection(32); michael@0: pattern = /a[-b]/; michael@0: string = 'a-'; michael@0: actualmatch = string.match(pattern); michael@0: expectedmatch = Array('a-'); michael@0: addThis(); michael@0: michael@0: status = inSection(33); michael@0: pattern = /a[b-]/; michael@0: string = 'a-'; michael@0: actualmatch = string.match(pattern); michael@0: expectedmatch = Array('a-'); michael@0: addThis(); michael@0: michael@0: status = inSection(34); michael@0: pattern = /a]/; michael@0: string = 'a]'; michael@0: actualmatch = string.match(pattern); michael@0: expectedmatch = Array('a]'); michael@0: addThis(); michael@0: michael@0: /* Perl supports ] & ^] inside a [], ECMA does not michael@0: pattern = /a[]]b/; michael@0: status = inSection(35); michael@0: string = 'a]b'; michael@0: actualmatch = string.match(pattern); michael@0: expectedmatch = Array('a]b'); michael@0: addThis(); michael@0: */ michael@0: michael@0: status = inSection(36); michael@0: pattern = /a[^bc]d/; michael@0: string = 'aed'; michael@0: actualmatch = string.match(pattern); michael@0: expectedmatch = Array('aed'); michael@0: addThis(); michael@0: michael@0: status = inSection(37); michael@0: pattern = /a[^-b]c/; michael@0: string = 'adc'; michael@0: actualmatch = string.match(pattern); michael@0: expectedmatch = Array('adc'); michael@0: addThis(); michael@0: michael@0: /* Perl supports ] & ^] inside a [], ECMA does not michael@0: status = inSection(38); michael@0: pattern = /a[^]b]c/; michael@0: string = 'adc'; michael@0: actualmatch = string.match(pattern); michael@0: expectedmatch = Array('adc'); michael@0: addThis(); michael@0: */ michael@0: michael@0: status = inSection(39); michael@0: pattern = /\ba\b/; michael@0: string = 'a-'; michael@0: actualmatch = string.match(pattern); michael@0: expectedmatch = Array('a'); michael@0: addThis(); michael@0: michael@0: status = inSection(40); michael@0: pattern = /\ba\b/; michael@0: string = '-a'; michael@0: actualmatch = string.match(pattern); michael@0: expectedmatch = Array('a'); michael@0: addThis(); michael@0: michael@0: status = inSection(41); michael@0: pattern = /\ba\b/; michael@0: string = '-a-'; michael@0: actualmatch = string.match(pattern); michael@0: expectedmatch = Array('a'); michael@0: addThis(); michael@0: michael@0: status = inSection(42); michael@0: pattern = /\By\b/; michael@0: string = 'xy'; michael@0: actualmatch = string.match(pattern); michael@0: expectedmatch = Array('y'); michael@0: addThis(); michael@0: michael@0: status = inSection(43); michael@0: pattern = /\by\B/; michael@0: string = 'yz'; michael@0: actualmatch = string.match(pattern); michael@0: expectedmatch = Array('y'); michael@0: addThis(); michael@0: michael@0: status = inSection(44); michael@0: pattern = /\By\B/; michael@0: string = 'xyz'; michael@0: actualmatch = string.match(pattern); michael@0: expectedmatch = Array('y'); michael@0: addThis(); michael@0: michael@0: status = inSection(45); michael@0: pattern = /\w/; michael@0: string = 'a'; michael@0: actualmatch = string.match(pattern); michael@0: expectedmatch = Array('a'); michael@0: addThis(); michael@0: michael@0: status = inSection(46); michael@0: pattern = /\W/; michael@0: string = '-'; michael@0: actualmatch = string.match(pattern); michael@0: expectedmatch = Array('-'); michael@0: addThis(); michael@0: michael@0: status = inSection(47); michael@0: pattern = /a\Sb/; michael@0: string = 'a-b'; michael@0: actualmatch = string.match(pattern); michael@0: expectedmatch = Array('a-b'); michael@0: addThis(); michael@0: michael@0: status = inSection(48); michael@0: pattern = /\d/; michael@0: string = '1'; michael@0: actualmatch = string.match(pattern); michael@0: expectedmatch = Array('1'); michael@0: addThis(); michael@0: michael@0: status = inSection(49); michael@0: pattern = /\D/; michael@0: string = '-'; michael@0: actualmatch = string.match(pattern); michael@0: expectedmatch = Array('-'); michael@0: addThis(); michael@0: michael@0: status = inSection(50); michael@0: pattern = /[\w]/; michael@0: string = 'a'; michael@0: actualmatch = string.match(pattern); michael@0: expectedmatch = Array('a'); michael@0: addThis(); michael@0: michael@0: status = inSection(51); michael@0: pattern = /[\W]/; michael@0: string = '-'; michael@0: actualmatch = string.match(pattern); michael@0: expectedmatch = Array('-'); michael@0: addThis(); michael@0: michael@0: status = inSection(52); michael@0: pattern = /a[\S]b/; michael@0: string = 'a-b'; michael@0: actualmatch = string.match(pattern); michael@0: expectedmatch = Array('a-b'); michael@0: addThis(); michael@0: michael@0: status = inSection(53); michael@0: pattern = /[\d]/; michael@0: string = '1'; michael@0: actualmatch = string.match(pattern); michael@0: expectedmatch = Array('1'); michael@0: addThis(); michael@0: michael@0: status = inSection(54); michael@0: pattern = /[\D]/; michael@0: string = '-'; michael@0: actualmatch = string.match(pattern); michael@0: expectedmatch = Array('-'); michael@0: addThis(); michael@0: michael@0: status = inSection(55); michael@0: pattern = /ab|cd/; michael@0: string = 'abc'; michael@0: actualmatch = string.match(pattern); michael@0: expectedmatch = Array('ab'); michael@0: addThis(); michael@0: michael@0: status = inSection(56); michael@0: pattern = /ab|cd/; michael@0: string = 'abcd'; michael@0: actualmatch = string.match(pattern); michael@0: expectedmatch = Array('ab'); michael@0: addThis(); michael@0: michael@0: status = inSection(57); michael@0: pattern = /()ef/; michael@0: string = 'def'; michael@0: actualmatch = string.match(pattern); michael@0: expectedmatch = Array('ef', ''); michael@0: addThis(); michael@0: michael@0: status = inSection(58); michael@0: pattern = /a\(b/; michael@0: string = 'a(b'; michael@0: actualmatch = string.match(pattern); michael@0: expectedmatch = Array('a(b'); michael@0: addThis(); michael@0: michael@0: status = inSection(59); michael@0: pattern = /a\(*b/; michael@0: string = 'ab'; michael@0: actualmatch = string.match(pattern); michael@0: expectedmatch = Array('ab'); michael@0: addThis(); michael@0: michael@0: status = inSection(60); michael@0: pattern = /a\(*b/; michael@0: string = 'a((b'; michael@0: actualmatch = string.match(pattern); michael@0: expectedmatch = Array('a((b'); michael@0: addThis(); michael@0: michael@0: status = inSection(61); michael@0: pattern = /a\\b/; michael@0: string = 'a\\b'; michael@0: actualmatch = string.match(pattern); michael@0: expectedmatch = Array('a\\b'); michael@0: addThis(); michael@0: michael@0: status = inSection(62); michael@0: pattern = /((a))/; michael@0: string = 'abc'; michael@0: actualmatch = string.match(pattern); michael@0: expectedmatch = Array('a', 'a', 'a'); michael@0: addThis(); michael@0: michael@0: status = inSection(63); michael@0: pattern = /(a)b(c)/; michael@0: string = 'abc'; michael@0: actualmatch = string.match(pattern); michael@0: expectedmatch = Array('abc', 'a', 'c'); michael@0: addThis(); michael@0: michael@0: status = inSection(64); michael@0: pattern = /a+b+c/; michael@0: string = 'aabbabc'; michael@0: actualmatch = string.match(pattern); michael@0: expectedmatch = Array('abc'); michael@0: addThis(); michael@0: michael@0: status = inSection(65); michael@0: pattern = /a{1,}b{1,}c/; michael@0: string = 'aabbabc'; michael@0: actualmatch = string.match(pattern); michael@0: expectedmatch = Array('abc'); michael@0: addThis(); michael@0: michael@0: status = inSection(66); michael@0: pattern = /a.+?c/; michael@0: string = 'abcabc'; michael@0: actualmatch = string.match(pattern); michael@0: expectedmatch = Array('abc'); michael@0: addThis(); michael@0: michael@0: status = inSection(67); michael@0: pattern = /(a+|b)*/; michael@0: string = 'ab'; michael@0: actualmatch = string.match(pattern); michael@0: expectedmatch = Array('ab', 'b'); michael@0: addThis(); michael@0: michael@0: status = inSection(68); michael@0: pattern = /(a+|b){0,}/; michael@0: string = 'ab'; michael@0: actualmatch = string.match(pattern); michael@0: expectedmatch = Array('ab', 'b'); michael@0: addThis(); michael@0: michael@0: status = inSection(69); michael@0: pattern = /(a+|b)+/; michael@0: string = 'ab'; michael@0: actualmatch = string.match(pattern); michael@0: expectedmatch = Array('ab', 'b'); michael@0: addThis(); michael@0: michael@0: status = inSection(70); michael@0: pattern = /(a+|b){1,}/; michael@0: string = 'ab'; michael@0: actualmatch = string.match(pattern); michael@0: expectedmatch = Array('ab', 'b'); michael@0: addThis(); michael@0: michael@0: status = inSection(71); michael@0: pattern = /(a+|b)?/; michael@0: string = 'ab'; michael@0: actualmatch = string.match(pattern); michael@0: expectedmatch = Array('a', 'a'); michael@0: addThis(); michael@0: michael@0: status = inSection(72); michael@0: pattern = /(a+|b){0,1}/; michael@0: string = 'ab'; michael@0: actualmatch = string.match(pattern); michael@0: expectedmatch = Array('a', 'a'); michael@0: addThis(); michael@0: michael@0: status = inSection(73); michael@0: pattern = /[^ab]*/; michael@0: string = 'cde'; michael@0: actualmatch = string.match(pattern); michael@0: expectedmatch = Array('cde'); michael@0: addThis(); michael@0: michael@0: status = inSection(74); michael@0: pattern = /([abc])*d/; michael@0: string = 'abbbcd'; michael@0: actualmatch = string.match(pattern); michael@0: expectedmatch = Array('abbbcd', 'c'); michael@0: addThis(); michael@0: michael@0: status = inSection(75); michael@0: pattern = /([abc])*bcd/; michael@0: string = 'abcd'; michael@0: actualmatch = string.match(pattern); michael@0: expectedmatch = Array('abcd', 'a'); michael@0: addThis(); michael@0: michael@0: status = inSection(76); michael@0: pattern = /a|b|c|d|e/; michael@0: string = 'e'; michael@0: actualmatch = string.match(pattern); michael@0: expectedmatch = Array('e'); michael@0: addThis(); michael@0: michael@0: status = inSection(77); michael@0: pattern = /(a|b|c|d|e)f/; michael@0: string = 'ef'; michael@0: actualmatch = string.match(pattern); michael@0: expectedmatch = Array('ef', 'e'); michael@0: addThis(); michael@0: michael@0: status = inSection(78); michael@0: pattern = /abcd*efg/; michael@0: string = 'abcdefg'; michael@0: actualmatch = string.match(pattern); michael@0: expectedmatch = Array('abcdefg'); michael@0: addThis(); michael@0: michael@0: status = inSection(79); michael@0: pattern = /ab*/; michael@0: string = 'xabyabbbz'; michael@0: actualmatch = string.match(pattern); michael@0: expectedmatch = Array('ab'); michael@0: addThis(); michael@0: michael@0: status = inSection(80); michael@0: pattern = /ab*/; michael@0: string = 'xayabbbz'; michael@0: actualmatch = string.match(pattern); michael@0: expectedmatch = Array('a'); michael@0: addThis(); michael@0: michael@0: status = inSection(81); michael@0: pattern = /(ab|cd)e/; michael@0: string = 'abcde'; michael@0: actualmatch = string.match(pattern); michael@0: expectedmatch = Array('cde', 'cd'); michael@0: addThis(); michael@0: michael@0: status = inSection(82); michael@0: pattern = /[abhgefdc]ij/; michael@0: string = 'hij'; michael@0: actualmatch = string.match(pattern); michael@0: expectedmatch = Array('hij'); michael@0: addThis(); michael@0: michael@0: status = inSection(83); michael@0: pattern = /(abc|)ef/; michael@0: string = 'abcdef'; michael@0: actualmatch = string.match(pattern); michael@0: expectedmatch = Array('ef', ''); michael@0: addThis(); michael@0: michael@0: status = inSection(84); michael@0: pattern = /(a|b)c*d/; michael@0: string = 'abcd'; michael@0: actualmatch = string.match(pattern); michael@0: expectedmatch = Array('bcd', 'b'); michael@0: addThis(); michael@0: michael@0: status = inSection(85); michael@0: pattern = /(ab|ab*)bc/; michael@0: string = 'abc'; michael@0: actualmatch = string.match(pattern); michael@0: expectedmatch = Array('abc', 'a'); michael@0: addThis(); michael@0: michael@0: status = inSection(86); michael@0: pattern = /a([bc]*)c*/; michael@0: string = 'abc'; michael@0: actualmatch = string.match(pattern); michael@0: expectedmatch = Array('abc', 'bc'); michael@0: addThis(); michael@0: michael@0: status = inSection(87); michael@0: pattern = /a([bc]*)(c*d)/; michael@0: string = 'abcd'; michael@0: actualmatch = string.match(pattern); michael@0: expectedmatch = Array('abcd', 'bc', 'd'); michael@0: addThis(); michael@0: michael@0: status = inSection(88); michael@0: pattern = /a([bc]+)(c*d)/; michael@0: string = 'abcd'; michael@0: actualmatch = string.match(pattern); michael@0: expectedmatch = Array('abcd', 'bc', 'd'); michael@0: addThis(); michael@0: michael@0: status = inSection(89); michael@0: pattern = /a([bc]*)(c+d)/; michael@0: string = 'abcd'; michael@0: actualmatch = string.match(pattern); michael@0: expectedmatch = Array('abcd', 'b', 'cd'); michael@0: addThis(); michael@0: michael@0: status = inSection(90); michael@0: pattern = /a[bcd]*dcdcde/; michael@0: string = 'adcdcde'; michael@0: actualmatch = string.match(pattern); michael@0: expectedmatch = Array('adcdcde'); michael@0: addThis(); michael@0: michael@0: status = inSection(91); michael@0: pattern = /(ab|a)b*c/; michael@0: string = 'abc'; michael@0: actualmatch = string.match(pattern); michael@0: expectedmatch = Array('abc', 'ab'); michael@0: addThis(); michael@0: michael@0: status = inSection(92); michael@0: pattern = /((a)(b)c)(d)/; michael@0: string = 'abcd'; michael@0: actualmatch = string.match(pattern); michael@0: expectedmatch = Array('abcd', 'abc', 'a', 'b', 'd'); michael@0: addThis(); michael@0: michael@0: status = inSection(93); michael@0: pattern = /[a-zA-Z_][a-zA-Z0-9_]*/; michael@0: string = 'alpha'; michael@0: actualmatch = string.match(pattern); michael@0: expectedmatch = Array('alpha'); michael@0: addThis(); michael@0: michael@0: status = inSection(94); michael@0: pattern = /^a(bc+|b[eh])g|.h$/; michael@0: string = 'abh'; michael@0: actualmatch = string.match(pattern); michael@0: expectedmatch = Array('bh', undefined); michael@0: addThis(); michael@0: michael@0: status = inSection(95); michael@0: pattern = /(bc+d$|ef*g.|h?i(j|k))/; michael@0: string = 'effgz'; michael@0: actualmatch = string.match(pattern); michael@0: expectedmatch = Array('effgz', 'effgz', undefined); michael@0: addThis(); michael@0: michael@0: status = inSection(96); michael@0: pattern = /(bc+d$|ef*g.|h?i(j|k))/; michael@0: string = 'ij'; michael@0: actualmatch = string.match(pattern); michael@0: expectedmatch = Array('ij', 'ij', 'j'); michael@0: addThis(); michael@0: michael@0: status = inSection(97); michael@0: pattern = /(bc+d$|ef*g.|h?i(j|k))/; michael@0: string = 'reffgz'; michael@0: actualmatch = string.match(pattern); michael@0: expectedmatch = Array('effgz', 'effgz', undefined); michael@0: addThis(); michael@0: michael@0: status = inSection(98); michael@0: pattern = /((((((((((a))))))))))/; michael@0: string = 'a'; michael@0: actualmatch = string.match(pattern); michael@0: expectedmatch = Array('a', 'a', 'a', 'a', 'a', 'a', 'a', 'a', 'a', 'a', 'a'); michael@0: addThis(); michael@0: michael@0: status = inSection(99); michael@0: pattern = /((((((((((a))))))))))\10/; michael@0: string = 'aa'; michael@0: actualmatch = string.match(pattern); michael@0: expectedmatch = Array('aa', 'a', 'a', 'a', 'a', 'a', 'a', 'a', 'a', 'a', 'a'); michael@0: addThis(); michael@0: michael@0: status = inSection(100); michael@0: pattern = /((((((((((a))))))))))/; michael@0: string = 'a!'; michael@0: actualmatch = string.match(pattern); michael@0: expectedmatch = Array('a', 'a', 'a', 'a', 'a', 'a', 'a', 'a', 'a', 'a', 'a'); michael@0: addThis(); michael@0: michael@0: status = inSection(101); michael@0: pattern = /(((((((((a)))))))))/; michael@0: string = 'a'; michael@0: actualmatch = string.match(pattern); michael@0: expectedmatch = Array('a', 'a', 'a', 'a', 'a', 'a', 'a', 'a', 'a', 'a'); michael@0: addThis(); michael@0: michael@0: status = inSection(102); michael@0: pattern = /(.*)c(.*)/; michael@0: string = 'abcde'; michael@0: actualmatch = string.match(pattern); michael@0: expectedmatch = Array('abcde', 'ab', 'de'); michael@0: addThis(); michael@0: michael@0: status = inSection(103); michael@0: pattern = /abcd/; michael@0: string = 'abcd'; michael@0: actualmatch = string.match(pattern); michael@0: expectedmatch = Array('abcd'); michael@0: addThis(); michael@0: michael@0: status = inSection(104); michael@0: pattern = /a(bc)d/; michael@0: string = 'abcd'; michael@0: actualmatch = string.match(pattern); michael@0: expectedmatch = Array('abcd', 'bc'); michael@0: addThis(); michael@0: michael@0: status = inSection(105); michael@0: pattern = /a[-]?c/; michael@0: string = 'ac'; michael@0: actualmatch = string.match(pattern); michael@0: expectedmatch = Array('ac'); michael@0: addThis(); michael@0: michael@0: status = inSection(106); michael@0: pattern = /(abc)\1/; michael@0: string = 'abcabc'; michael@0: actualmatch = string.match(pattern); michael@0: expectedmatch = Array('abcabc', 'abc'); michael@0: addThis(); michael@0: michael@0: status = inSection(107); michael@0: pattern = /([a-c]*)\1/; michael@0: string = 'abcabc'; michael@0: actualmatch = string.match(pattern); michael@0: expectedmatch = Array('abcabc', 'abc'); michael@0: addThis(); michael@0: michael@0: status = inSection(108); michael@0: pattern = /(a)|\1/; michael@0: string = 'a'; michael@0: actualmatch = string.match(pattern); michael@0: expectedmatch = Array('a', 'a'); michael@0: addThis(); michael@0: michael@0: status = inSection(109); michael@0: pattern = /(([a-c])b*?\2)*/; michael@0: string = 'ababbbcbc'; michael@0: actualmatch = string.match(pattern); michael@0: expectedmatch = Array('ababb', 'bb', 'b'); michael@0: addThis(); michael@0: michael@0: status = inSection(110); michael@0: pattern = /(([a-c])b*?\2){3}/; michael@0: string = 'ababbbcbc'; michael@0: actualmatch = string.match(pattern); michael@0: expectedmatch = Array('ababbbcbc', 'cbc', 'c'); michael@0: addThis(); michael@0: michael@0: /* Can't refer to a capture before it's encountered & completed michael@0: status = inSection(111); michael@0: pattern = /((\3|b)\2(a)x)+/; michael@0: string = 'aaaxabaxbaaxbbax'; michael@0: actualmatch = string.match(pattern); michael@0: expectedmatch = Array('bbax', 'bbax', 'b', 'a'); michael@0: addThis(); michael@0: michael@0: status = inSection(112); michael@0: pattern = /((\3|b)\2(a)){2,}/; michael@0: string = 'bbaababbabaaaaabbaaaabba'; michael@0: actualmatch = string.match(pattern); michael@0: expectedmatch = Array('bbaaaabba', 'bba', 'b', 'a'); michael@0: addThis(); michael@0: */ michael@0: michael@0: status = inSection(113); michael@0: pattern = /abc/i; michael@0: string = 'ABC'; michael@0: actualmatch = string.match(pattern); michael@0: expectedmatch = Array('ABC'); michael@0: addThis(); michael@0: michael@0: status = inSection(114); michael@0: pattern = /abc/i; michael@0: string = 'XABCY'; michael@0: actualmatch = string.match(pattern); michael@0: expectedmatch = Array('ABC'); michael@0: addThis(); michael@0: michael@0: status = inSection(115); michael@0: pattern = /abc/i; michael@0: string = 'ABABC'; michael@0: actualmatch = string.match(pattern); michael@0: expectedmatch = Array('ABC'); michael@0: addThis(); michael@0: michael@0: status = inSection(116); michael@0: pattern = /ab*c/i; michael@0: string = 'ABC'; michael@0: actualmatch = string.match(pattern); michael@0: expectedmatch = Array('ABC'); michael@0: addThis(); michael@0: michael@0: status = inSection(117); michael@0: pattern = /ab*bc/i; michael@0: string = 'ABC'; michael@0: actualmatch = string.match(pattern); michael@0: expectedmatch = Array('ABC'); michael@0: addThis(); michael@0: michael@0: status = inSection(118); michael@0: pattern = /ab*bc/i; michael@0: string = 'ABBC'; michael@0: actualmatch = string.match(pattern); michael@0: expectedmatch = Array('ABBC'); michael@0: addThis(); michael@0: michael@0: status = inSection(119); michael@0: pattern = /ab*?bc/i; michael@0: string = 'ABBBBC'; michael@0: actualmatch = string.match(pattern); michael@0: expectedmatch = Array('ABBBBC'); michael@0: addThis(); michael@0: michael@0: status = inSection(120); michael@0: pattern = /ab{0,}?bc/i; michael@0: string = 'ABBBBC'; michael@0: actualmatch = string.match(pattern); michael@0: expectedmatch = Array('ABBBBC'); michael@0: addThis(); michael@0: michael@0: status = inSection(121); michael@0: pattern = /ab+?bc/i; michael@0: string = 'ABBC'; michael@0: actualmatch = string.match(pattern); michael@0: expectedmatch = Array('ABBC'); michael@0: addThis(); michael@0: michael@0: status = inSection(122); michael@0: pattern = /ab+bc/i; michael@0: string = 'ABBBBC'; michael@0: actualmatch = string.match(pattern); michael@0: expectedmatch = Array('ABBBBC'); michael@0: addThis(); michael@0: michael@0: status = inSection(123); michael@0: pattern = /ab{1,}?bc/i; michael@0: string = 'ABBBBC'; michael@0: actualmatch = string.match(pattern); michael@0: expectedmatch = Array('ABBBBC'); michael@0: addThis(); michael@0: michael@0: status = inSection(124); michael@0: pattern = /ab{1,3}?bc/i; michael@0: string = 'ABBBBC'; michael@0: actualmatch = string.match(pattern); michael@0: expectedmatch = Array('ABBBBC'); michael@0: addThis(); michael@0: michael@0: status = inSection(125); michael@0: pattern = /ab{3,4}?bc/i; michael@0: string = 'ABBBBC'; michael@0: actualmatch = string.match(pattern); michael@0: expectedmatch = Array('ABBBBC'); michael@0: addThis(); michael@0: michael@0: status = inSection(126); michael@0: pattern = /ab??bc/i; michael@0: string = 'ABBC'; michael@0: actualmatch = string.match(pattern); michael@0: expectedmatch = Array('ABBC'); michael@0: addThis(); michael@0: michael@0: status = inSection(127); michael@0: pattern = /ab??bc/i; michael@0: string = 'ABC'; michael@0: actualmatch = string.match(pattern); michael@0: expectedmatch = Array('ABC'); michael@0: addThis(); michael@0: michael@0: status = inSection(128); michael@0: pattern = /ab{0,1}?bc/i; michael@0: string = 'ABC'; michael@0: actualmatch = string.match(pattern); michael@0: expectedmatch = Array('ABC'); michael@0: addThis(); michael@0: michael@0: status = inSection(129); michael@0: pattern = /ab??c/i; michael@0: string = 'ABC'; michael@0: actualmatch = string.match(pattern); michael@0: expectedmatch = Array('ABC'); michael@0: addThis(); michael@0: michael@0: status = inSection(130); michael@0: pattern = /ab{0,1}?c/i; michael@0: string = 'ABC'; michael@0: actualmatch = string.match(pattern); michael@0: expectedmatch = Array('ABC'); michael@0: addThis(); michael@0: michael@0: status = inSection(131); michael@0: pattern = /^abc$/i; michael@0: string = 'ABC'; michael@0: actualmatch = string.match(pattern); michael@0: expectedmatch = Array('ABC'); michael@0: addThis(); michael@0: michael@0: status = inSection(132); michael@0: pattern = /^abc/i; michael@0: string = 'ABCC'; michael@0: actualmatch = string.match(pattern); michael@0: expectedmatch = Array('ABC'); michael@0: addThis(); michael@0: michael@0: status = inSection(133); michael@0: pattern = /abc$/i; michael@0: string = 'AABC'; michael@0: actualmatch = string.match(pattern); michael@0: expectedmatch = Array('ABC'); michael@0: addThis(); michael@0: michael@0: status = inSection(134); michael@0: pattern = /^/i; michael@0: string = 'ABC'; michael@0: actualmatch = string.match(pattern); michael@0: expectedmatch = Array(''); michael@0: addThis(); michael@0: michael@0: status = inSection(135); michael@0: pattern = /$/i; michael@0: string = 'ABC'; michael@0: actualmatch = string.match(pattern); michael@0: expectedmatch = Array(''); michael@0: addThis(); michael@0: michael@0: status = inSection(136); michael@0: pattern = /a.c/i; michael@0: string = 'ABC'; michael@0: actualmatch = string.match(pattern); michael@0: expectedmatch = Array('ABC'); michael@0: addThis(); michael@0: michael@0: status = inSection(137); michael@0: pattern = /a.c/i; michael@0: string = 'AXC'; michael@0: actualmatch = string.match(pattern); michael@0: expectedmatch = Array('AXC'); michael@0: addThis(); michael@0: michael@0: status = inSection(138); michael@0: pattern = /a.*?c/i; michael@0: string = 'AXYZC'; michael@0: actualmatch = string.match(pattern); michael@0: expectedmatch = Array('AXYZC'); michael@0: addThis(); michael@0: michael@0: status = inSection(139); michael@0: pattern = /a[bc]d/i; michael@0: string = 'ABD'; michael@0: actualmatch = string.match(pattern); michael@0: expectedmatch = Array('ABD'); michael@0: addThis(); michael@0: michael@0: status = inSection(140); michael@0: pattern = /a[b-d]e/i; michael@0: string = 'ACE'; michael@0: actualmatch = string.match(pattern); michael@0: expectedmatch = Array('ACE'); michael@0: addThis(); michael@0: michael@0: status = inSection(141); michael@0: pattern = /a[b-d]/i; michael@0: string = 'AAC'; michael@0: actualmatch = string.match(pattern); michael@0: expectedmatch = Array('AC'); michael@0: addThis(); michael@0: michael@0: status = inSection(142); michael@0: pattern = /a[-b]/i; michael@0: string = 'A-'; michael@0: actualmatch = string.match(pattern); michael@0: expectedmatch = Array('A-'); michael@0: addThis(); michael@0: michael@0: status = inSection(143); michael@0: pattern = /a[b-]/i; michael@0: string = 'A-'; michael@0: actualmatch = string.match(pattern); michael@0: expectedmatch = Array('A-'); michael@0: addThis(); michael@0: michael@0: status = inSection(144); michael@0: pattern = /a]/i; michael@0: string = 'A]'; michael@0: actualmatch = string.match(pattern); michael@0: expectedmatch = Array('A]'); michael@0: addThis(); michael@0: michael@0: /* Perl supports ] & ^] inside a [], ECMA does not michael@0: status = inSection(145); michael@0: pattern = /a[]]b/i; michael@0: string = 'A]B'; michael@0: actualmatch = string.match(pattern); michael@0: expectedmatch = Array('A]B'); michael@0: addThis(); michael@0: */ michael@0: michael@0: status = inSection(146); michael@0: pattern = /a[^bc]d/i; michael@0: string = 'AED'; michael@0: actualmatch = string.match(pattern); michael@0: expectedmatch = Array('AED'); michael@0: addThis(); michael@0: michael@0: status = inSection(147); michael@0: pattern = /a[^-b]c/i; michael@0: string = 'ADC'; michael@0: actualmatch = string.match(pattern); michael@0: expectedmatch = Array('ADC'); michael@0: addThis(); michael@0: michael@0: /* Perl supports ] & ^] inside a [], ECMA does not michael@0: status = inSection(148); michael@0: pattern = /a[^]b]c/i; michael@0: string = 'ADC'; michael@0: actualmatch = string.match(pattern); michael@0: expectedmatch = Array('ADC'); michael@0: addThis(); michael@0: */ michael@0: michael@0: status = inSection(149); michael@0: pattern = /ab|cd/i; michael@0: string = 'ABC'; michael@0: actualmatch = string.match(pattern); michael@0: expectedmatch = Array('AB'); michael@0: addThis(); michael@0: michael@0: status = inSection(150); michael@0: pattern = /ab|cd/i; michael@0: string = 'ABCD'; michael@0: actualmatch = string.match(pattern); michael@0: expectedmatch = Array('AB'); michael@0: addThis(); michael@0: michael@0: status = inSection(151); michael@0: pattern = /()ef/i; michael@0: string = 'DEF'; michael@0: actualmatch = string.match(pattern); michael@0: expectedmatch = Array('EF', ''); michael@0: addThis(); michael@0: michael@0: status = inSection(152); michael@0: pattern = /a\(b/i; michael@0: string = 'A(B'; michael@0: actualmatch = string.match(pattern); michael@0: expectedmatch = Array('A(B'); michael@0: addThis(); michael@0: michael@0: status = inSection(153); michael@0: pattern = /a\(*b/i; michael@0: string = 'AB'; michael@0: actualmatch = string.match(pattern); michael@0: expectedmatch = Array('AB'); michael@0: addThis(); michael@0: michael@0: status = inSection(154); michael@0: pattern = /a\(*b/i; michael@0: string = 'A((B'; michael@0: actualmatch = string.match(pattern); michael@0: expectedmatch = Array('A((B'); michael@0: addThis(); michael@0: michael@0: status = inSection(155); michael@0: pattern = /a\\b/i; michael@0: string = 'A\\B'; michael@0: actualmatch = string.match(pattern); michael@0: expectedmatch = Array('A\\B'); michael@0: addThis(); michael@0: michael@0: status = inSection(156); michael@0: pattern = /((a))/i; michael@0: string = 'ABC'; michael@0: actualmatch = string.match(pattern); michael@0: expectedmatch = Array('A', 'A', 'A'); michael@0: addThis(); michael@0: michael@0: status = inSection(157); michael@0: pattern = /(a)b(c)/i; michael@0: string = 'ABC'; michael@0: actualmatch = string.match(pattern); michael@0: expectedmatch = Array('ABC', 'A', 'C'); michael@0: addThis(); michael@0: michael@0: status = inSection(158); michael@0: pattern = /a+b+c/i; michael@0: string = 'AABBABC'; michael@0: actualmatch = string.match(pattern); michael@0: expectedmatch = Array('ABC'); michael@0: addThis(); michael@0: michael@0: status = inSection(159); michael@0: pattern = /a{1,}b{1,}c/i; michael@0: string = 'AABBABC'; michael@0: actualmatch = string.match(pattern); michael@0: expectedmatch = Array('ABC'); michael@0: addThis(); michael@0: michael@0: status = inSection(160); michael@0: pattern = /a.+?c/i; michael@0: string = 'ABCABC'; michael@0: actualmatch = string.match(pattern); michael@0: expectedmatch = Array('ABC'); michael@0: addThis(); michael@0: michael@0: status = inSection(161); michael@0: pattern = /a.*?c/i; michael@0: string = 'ABCABC'; michael@0: actualmatch = string.match(pattern); michael@0: expectedmatch = Array('ABC'); michael@0: addThis(); michael@0: michael@0: status = inSection(162); michael@0: pattern = /a.{0,5}?c/i; michael@0: string = 'ABCABC'; michael@0: actualmatch = string.match(pattern); michael@0: expectedmatch = Array('ABC'); michael@0: addThis(); michael@0: michael@0: status = inSection(163); michael@0: pattern = /(a+|b)*/i; michael@0: string = 'AB'; michael@0: actualmatch = string.match(pattern); michael@0: expectedmatch = Array('AB', 'B'); michael@0: addThis(); michael@0: michael@0: status = inSection(164); michael@0: pattern = /(a+|b){0,}/i; michael@0: string = 'AB'; michael@0: actualmatch = string.match(pattern); michael@0: expectedmatch = Array('AB', 'B'); michael@0: addThis(); michael@0: michael@0: status = inSection(165); michael@0: pattern = /(a+|b)+/i; michael@0: string = 'AB'; michael@0: actualmatch = string.match(pattern); michael@0: expectedmatch = Array('AB', 'B'); michael@0: addThis(); michael@0: michael@0: status = inSection(166); michael@0: pattern = /(a+|b){1,}/i; michael@0: string = 'AB'; michael@0: actualmatch = string.match(pattern); michael@0: expectedmatch = Array('AB', 'B'); michael@0: addThis(); michael@0: michael@0: status = inSection(167); michael@0: pattern = /(a+|b)?/i; michael@0: string = 'AB'; michael@0: actualmatch = string.match(pattern); michael@0: expectedmatch = Array('A', 'A'); michael@0: addThis(); michael@0: michael@0: status = inSection(168); michael@0: pattern = /(a+|b){0,1}/i; michael@0: string = 'AB'; michael@0: actualmatch = string.match(pattern); michael@0: expectedmatch = Array('A', 'A'); michael@0: addThis(); michael@0: michael@0: status = inSection(169); michael@0: pattern = /(a+|b){0,1}?/i; michael@0: string = 'AB'; michael@0: actualmatch = string.match(pattern); michael@0: expectedmatch = Array('', undefined); michael@0: addThis(); michael@0: michael@0: status = inSection(170); michael@0: pattern = /[^ab]*/i; michael@0: string = 'CDE'; michael@0: actualmatch = string.match(pattern); michael@0: expectedmatch = Array('CDE'); michael@0: addThis(); michael@0: michael@0: status = inSection(171); michael@0: pattern = /([abc])*d/i; michael@0: string = 'ABBBCD'; michael@0: actualmatch = string.match(pattern); michael@0: expectedmatch = Array('ABBBCD', 'C'); michael@0: addThis(); michael@0: michael@0: status = inSection(172); michael@0: pattern = /([abc])*bcd/i; michael@0: string = 'ABCD'; michael@0: actualmatch = string.match(pattern); michael@0: expectedmatch = Array('ABCD', 'A'); michael@0: addThis(); michael@0: michael@0: status = inSection(173); michael@0: pattern = /a|b|c|d|e/i; michael@0: string = 'E'; michael@0: actualmatch = string.match(pattern); michael@0: expectedmatch = Array('E'); michael@0: addThis(); michael@0: michael@0: status = inSection(174); michael@0: pattern = /(a|b|c|d|e)f/i; michael@0: string = 'EF'; michael@0: actualmatch = string.match(pattern); michael@0: expectedmatch = Array('EF', 'E'); michael@0: addThis(); michael@0: michael@0: status = inSection(175); michael@0: pattern = /abcd*efg/i; michael@0: string = 'ABCDEFG'; michael@0: actualmatch = string.match(pattern); michael@0: expectedmatch = Array('ABCDEFG'); michael@0: addThis(); michael@0: michael@0: status = inSection(176); michael@0: pattern = /ab*/i; michael@0: string = 'XABYABBBZ'; michael@0: actualmatch = string.match(pattern); michael@0: expectedmatch = Array('AB'); michael@0: addThis(); michael@0: michael@0: status = inSection(177); michael@0: pattern = /ab*/i; michael@0: string = 'XAYABBBZ'; michael@0: actualmatch = string.match(pattern); michael@0: expectedmatch = Array('A'); michael@0: addThis(); michael@0: michael@0: status = inSection(178); michael@0: pattern = /(ab|cd)e/i; michael@0: string = 'ABCDE'; michael@0: actualmatch = string.match(pattern); michael@0: expectedmatch = Array('CDE', 'CD'); michael@0: addThis(); michael@0: michael@0: status = inSection(179); michael@0: pattern = /[abhgefdc]ij/i; michael@0: string = 'HIJ'; michael@0: actualmatch = string.match(pattern); michael@0: expectedmatch = Array('HIJ'); michael@0: addThis(); michael@0: michael@0: status = inSection(180); michael@0: pattern = /(abc|)ef/i; michael@0: string = 'ABCDEF'; michael@0: actualmatch = string.match(pattern); michael@0: expectedmatch = Array('EF', ''); michael@0: addThis(); michael@0: michael@0: status = inSection(181); michael@0: pattern = /(a|b)c*d/i; michael@0: string = 'ABCD'; michael@0: actualmatch = string.match(pattern); michael@0: expectedmatch = Array('BCD', 'B'); michael@0: addThis(); michael@0: michael@0: status = inSection(182); michael@0: pattern = /(ab|ab*)bc/i; michael@0: string = 'ABC'; michael@0: actualmatch = string.match(pattern); michael@0: expectedmatch = Array('ABC', 'A'); michael@0: addThis(); michael@0: michael@0: status = inSection(183); michael@0: pattern = /a([bc]*)c*/i; michael@0: string = 'ABC'; michael@0: actualmatch = string.match(pattern); michael@0: expectedmatch = Array('ABC', 'BC'); michael@0: addThis(); michael@0: michael@0: status = inSection(184); michael@0: pattern = /a([bc]*)(c*d)/i; michael@0: string = 'ABCD'; michael@0: actualmatch = string.match(pattern); michael@0: expectedmatch = Array('ABCD', 'BC', 'D'); michael@0: addThis(); michael@0: michael@0: status = inSection(185); michael@0: pattern = /a([bc]+)(c*d)/i; michael@0: string = 'ABCD'; michael@0: actualmatch = string.match(pattern); michael@0: expectedmatch = Array('ABCD', 'BC', 'D'); michael@0: addThis(); michael@0: michael@0: status = inSection(186); michael@0: pattern = /a([bc]*)(c+d)/i; michael@0: string = 'ABCD'; michael@0: actualmatch = string.match(pattern); michael@0: expectedmatch = Array('ABCD', 'B', 'CD'); michael@0: addThis(); michael@0: michael@0: status = inSection(187); michael@0: pattern = /a[bcd]*dcdcde/i; michael@0: string = 'ADCDCDE'; michael@0: actualmatch = string.match(pattern); michael@0: expectedmatch = Array('ADCDCDE'); michael@0: addThis(); michael@0: michael@0: status = inSection(188); michael@0: pattern = /(ab|a)b*c/i; michael@0: string = 'ABC'; michael@0: actualmatch = string.match(pattern); michael@0: expectedmatch = Array('ABC', 'AB'); michael@0: addThis(); michael@0: michael@0: status = inSection(189); michael@0: pattern = /((a)(b)c)(d)/i; michael@0: string = 'ABCD'; michael@0: actualmatch = string.match(pattern); michael@0: expectedmatch = Array('ABCD', 'ABC', 'A', 'B', 'D'); michael@0: addThis(); michael@0: michael@0: status = inSection(190); michael@0: pattern = /[a-zA-Z_][a-zA-Z0-9_]*/i; michael@0: string = 'ALPHA'; michael@0: actualmatch = string.match(pattern); michael@0: expectedmatch = Array('ALPHA'); michael@0: addThis(); michael@0: michael@0: status = inSection(191); michael@0: pattern = /^a(bc+|b[eh])g|.h$/i; michael@0: string = 'ABH'; michael@0: actualmatch = string.match(pattern); michael@0: expectedmatch = Array('BH', undefined); michael@0: addThis(); michael@0: michael@0: status = inSection(192); michael@0: pattern = /(bc+d$|ef*g.|h?i(j|k))/i; michael@0: string = 'EFFGZ'; michael@0: actualmatch = string.match(pattern); michael@0: expectedmatch = Array('EFFGZ', 'EFFGZ', undefined); michael@0: addThis(); michael@0: michael@0: status = inSection(193); michael@0: pattern = /(bc+d$|ef*g.|h?i(j|k))/i; michael@0: string = 'IJ'; michael@0: actualmatch = string.match(pattern); michael@0: expectedmatch = Array('IJ', 'IJ', 'J'); michael@0: addThis(); michael@0: michael@0: status = inSection(194); michael@0: pattern = /(bc+d$|ef*g.|h?i(j|k))/i; michael@0: string = 'REFFGZ'; michael@0: actualmatch = string.match(pattern); michael@0: expectedmatch = Array('EFFGZ', 'EFFGZ', undefined); michael@0: addThis(); michael@0: michael@0: status = inSection(195); michael@0: pattern = /((((((((((a))))))))))/i; michael@0: string = 'A'; michael@0: actualmatch = string.match(pattern); michael@0: expectedmatch = Array('A', 'A', 'A', 'A', 'A', 'A', 'A', 'A', 'A', 'A', 'A'); michael@0: addThis(); michael@0: michael@0: status = inSection(196); michael@0: pattern = /((((((((((a))))))))))\10/i; michael@0: string = 'AA'; michael@0: actualmatch = string.match(pattern); michael@0: expectedmatch = Array('AA', 'A', 'A', 'A', 'A', 'A', 'A', 'A', 'A', 'A', 'A'); michael@0: addThis(); michael@0: michael@0: status = inSection(197); michael@0: pattern = /((((((((((a))))))))))/i; michael@0: string = 'A!'; michael@0: actualmatch = string.match(pattern); michael@0: expectedmatch = Array('A', 'A', 'A', 'A', 'A', 'A', 'A', 'A', 'A', 'A', 'A'); michael@0: addThis(); michael@0: michael@0: status = inSection(198); michael@0: pattern = /(((((((((a)))))))))/i; michael@0: string = 'A'; michael@0: actualmatch = string.match(pattern); michael@0: expectedmatch = Array('A', 'A', 'A', 'A', 'A', 'A', 'A', 'A', 'A', 'A'); michael@0: addThis(); michael@0: michael@0: status = inSection(199); michael@0: pattern = /(?:(?:(?:(?:(?:(?:(?:(?:(?:(a))))))))))/i; michael@0: string = 'A'; michael@0: actualmatch = string.match(pattern); michael@0: expectedmatch = Array('A', 'A'); michael@0: addThis(); michael@0: michael@0: status = inSection(200); michael@0: pattern = /(?:(?:(?:(?:(?:(?:(?:(?:(?:(a|b|c))))))))))/i; michael@0: string = 'C'; michael@0: actualmatch = string.match(pattern); michael@0: expectedmatch = Array('C', 'C'); michael@0: addThis(); michael@0: michael@0: status = inSection(201); michael@0: pattern = /(.*)c(.*)/i; michael@0: string = 'ABCDE'; michael@0: actualmatch = string.match(pattern); michael@0: expectedmatch = Array('ABCDE', 'AB', 'DE'); michael@0: addThis(); michael@0: michael@0: status = inSection(202); michael@0: pattern = /abcd/i; michael@0: string = 'ABCD'; michael@0: actualmatch = string.match(pattern); michael@0: expectedmatch = Array('ABCD'); michael@0: addThis(); michael@0: michael@0: status = inSection(203); michael@0: pattern = /a(bc)d/i; michael@0: string = 'ABCD'; michael@0: actualmatch = string.match(pattern); michael@0: expectedmatch = Array('ABCD', 'BC'); michael@0: addThis(); michael@0: michael@0: status = inSection(204); michael@0: pattern = /a[-]?c/i; michael@0: string = 'AC'; michael@0: actualmatch = string.match(pattern); michael@0: expectedmatch = Array('AC'); michael@0: addThis(); michael@0: michael@0: status = inSection(205); michael@0: pattern = /(abc)\1/i; michael@0: string = 'ABCABC'; michael@0: actualmatch = string.match(pattern); michael@0: expectedmatch = Array('ABCABC', 'ABC'); michael@0: addThis(); michael@0: michael@0: status = inSection(206); michael@0: pattern = /([a-c]*)\1/i; michael@0: string = 'ABCABC'; michael@0: actualmatch = string.match(pattern); michael@0: expectedmatch = Array('ABCABC', 'ABC'); michael@0: addThis(); michael@0: michael@0: status = inSection(207); michael@0: pattern = /a(?!b)./; michael@0: string = 'abad'; michael@0: actualmatch = string.match(pattern); michael@0: expectedmatch = Array('ad'); michael@0: addThis(); michael@0: michael@0: status = inSection(208); michael@0: pattern = /a(?=d)./; michael@0: string = 'abad'; michael@0: actualmatch = string.match(pattern); michael@0: expectedmatch = Array('ad'); michael@0: addThis(); michael@0: michael@0: status = inSection(209); michael@0: pattern = /a(?=c|d)./; michael@0: string = 'abad'; michael@0: actualmatch = string.match(pattern); michael@0: expectedmatch = Array('ad'); michael@0: addThis(); michael@0: michael@0: status = inSection(210); michael@0: pattern = /a(?:b|c|d)(.)/; michael@0: string = 'ace'; michael@0: actualmatch = string.match(pattern); michael@0: expectedmatch = Array('ace', 'e'); michael@0: addThis(); michael@0: michael@0: status = inSection(211); michael@0: pattern = /a(?:b|c|d)*(.)/; michael@0: string = 'ace'; michael@0: actualmatch = string.match(pattern); michael@0: expectedmatch = Array('ace', 'e'); michael@0: addThis(); michael@0: michael@0: status = inSection(212); michael@0: pattern = /a(?:b|c|d)+?(.)/; michael@0: string = 'ace'; michael@0: actualmatch = string.match(pattern); michael@0: expectedmatch = Array('ace', 'e'); michael@0: addThis(); michael@0: michael@0: status = inSection(213); michael@0: pattern = /a(?:b|c|d)+?(.)/; michael@0: string = 'acdbcdbe'; michael@0: actualmatch = string.match(pattern); michael@0: expectedmatch = Array('acd', 'd'); michael@0: addThis(); michael@0: michael@0: status = inSection(214); michael@0: pattern = /a(?:b|c|d)+(.)/; michael@0: string = 'acdbcdbe'; michael@0: actualmatch = string.match(pattern); michael@0: expectedmatch = Array('acdbcdbe', 'e'); michael@0: addThis(); michael@0: michael@0: status = inSection(215); michael@0: pattern = /a(?:b|c|d){2}(.)/; michael@0: string = 'acdbcdbe'; michael@0: actualmatch = string.match(pattern); michael@0: expectedmatch = Array('acdb', 'b'); michael@0: addThis(); michael@0: michael@0: status = inSection(216); michael@0: pattern = /a(?:b|c|d){4,5}(.)/; michael@0: string = 'acdbcdbe'; michael@0: actualmatch = string.match(pattern); michael@0: expectedmatch = Array('acdbcdb', 'b'); michael@0: addThis(); michael@0: michael@0: status = inSection(217); michael@0: pattern = /a(?:b|c|d){4,5}?(.)/; michael@0: string = 'acdbcdbe'; michael@0: actualmatch = string.match(pattern); michael@0: expectedmatch = Array('acdbcd', 'd'); michael@0: addThis(); michael@0: michael@0: // MODIFIED - ECMA has different rules for paren contents michael@0: status = inSection(218); michael@0: pattern = /((foo)|(bar))*/; michael@0: string = 'foobar'; michael@0: actualmatch = string.match(pattern); michael@0: //expectedmatch = Array('foobar', 'bar', 'foo', 'bar'); michael@0: expectedmatch = Array('foobar', 'bar', undefined, 'bar'); michael@0: addThis(); michael@0: michael@0: status = inSection(219); michael@0: pattern = /a(?:b|c|d){6,7}(.)/; michael@0: string = 'acdbcdbe'; michael@0: actualmatch = string.match(pattern); michael@0: expectedmatch = Array('acdbcdbe', 'e'); michael@0: addThis(); michael@0: michael@0: status = inSection(220); michael@0: pattern = /a(?:b|c|d){6,7}?(.)/; michael@0: string = 'acdbcdbe'; michael@0: actualmatch = string.match(pattern); michael@0: expectedmatch = Array('acdbcdbe', 'e'); michael@0: addThis(); michael@0: michael@0: status = inSection(221); michael@0: pattern = /a(?:b|c|d){5,6}(.)/; michael@0: string = 'acdbcdbe'; michael@0: actualmatch = string.match(pattern); michael@0: expectedmatch = Array('acdbcdbe', 'e'); michael@0: addThis(); michael@0: michael@0: status = inSection(222); michael@0: pattern = /a(?:b|c|d){5,6}?(.)/; michael@0: string = 'acdbcdbe'; michael@0: actualmatch = string.match(pattern); michael@0: expectedmatch = Array('acdbcdb', 'b'); michael@0: addThis(); michael@0: michael@0: status = inSection(223); michael@0: pattern = /a(?:b|c|d){5,7}(.)/; michael@0: string = 'acdbcdbe'; michael@0: actualmatch = string.match(pattern); michael@0: expectedmatch = Array('acdbcdbe', 'e'); michael@0: addThis(); michael@0: michael@0: status = inSection(224); michael@0: pattern = /a(?:b|c|d){5,7}?(.)/; michael@0: string = 'acdbcdbe'; michael@0: actualmatch = string.match(pattern); michael@0: expectedmatch = Array('acdbcdb', 'b'); michael@0: addThis(); michael@0: michael@0: status = inSection(225); michael@0: pattern = /a(?:b|(c|e){1,2}?|d)+?(.)/; michael@0: string = 'ace'; michael@0: actualmatch = string.match(pattern); michael@0: expectedmatch = Array('ace', 'c', 'e'); michael@0: addThis(); michael@0: michael@0: status = inSection(226); michael@0: pattern = /^(.+)?B/; michael@0: string = 'AB'; michael@0: actualmatch = string.match(pattern); michael@0: expectedmatch = Array('AB', 'A'); michael@0: addThis(); michael@0: michael@0: /* MODIFIED - ECMA has different rules for paren contents */ michael@0: status = inSection(227); michael@0: pattern = /^([^a-z])|(\^)$/; michael@0: string = '.'; michael@0: actualmatch = string.match(pattern); michael@0: //expectedmatch = Array('.', '.', ''); michael@0: expectedmatch = Array('.', '.', undefined); michael@0: addThis(); michael@0: michael@0: status = inSection(228); michael@0: pattern = /^[<>]&/; michael@0: string = '<&OUT'; michael@0: actualmatch = string.match(pattern); michael@0: expectedmatch = Array('<&'); michael@0: addThis(); michael@0: michael@0: /* Can't refer to a capture before it's encountered & completed michael@0: status = inSection(229); michael@0: pattern = /^(a\1?){4}$/; michael@0: string = 'aaaaaaaaaa'; michael@0: actualmatch = string.match(pattern); michael@0: expectedmatch = Array('aaaaaaaaaa', 'aaaa'); michael@0: addThis(); michael@0: michael@0: status = inSection(230); michael@0: pattern = /^(a(?(1)\1)){4}$/; michael@0: string = 'aaaaaaaaaa'; michael@0: actualmatch = string.match(pattern); michael@0: expectedmatch = Array('aaaaaaaaaa', 'aaaa'); michael@0: addThis(); michael@0: */ michael@0: michael@0: status = inSection(231); michael@0: pattern = /((a{4})+)/; michael@0: string = 'aaaaaaaaa'; michael@0: actualmatch = string.match(pattern); michael@0: expectedmatch = Array('aaaaaaaa', 'aaaaaaaa', 'aaaa'); michael@0: addThis(); michael@0: michael@0: status = inSection(232); michael@0: pattern = /(((aa){2})+)/; michael@0: string = 'aaaaaaaaaa'; michael@0: actualmatch = string.match(pattern); michael@0: expectedmatch = Array('aaaaaaaa', 'aaaaaaaa', 'aaaa', 'aa'); michael@0: addThis(); michael@0: michael@0: status = inSection(233); michael@0: pattern = /(((a{2}){2})+)/; michael@0: string = 'aaaaaaaaaa'; michael@0: actualmatch = string.match(pattern); michael@0: expectedmatch = Array('aaaaaaaa', 'aaaaaaaa', 'aaaa', 'aa'); michael@0: addThis(); michael@0: michael@0: status = inSection(234); michael@0: pattern = /(?:(f)(o)(o)|(b)(a)(r))*/; michael@0: string = 'foobar'; michael@0: actualmatch = string.match(pattern); michael@0: //expectedmatch = Array('foobar', 'f', 'o', 'o', 'b', 'a', 'r'); michael@0: expectedmatch = Array('foobar', undefined, undefined, undefined, 'b', 'a', 'r'); michael@0: addThis(); michael@0: michael@0: /* ECMA supports (?: (?= and (?! but doesn't support (?< etc. michael@0: status = inSection(235); michael@0: pattern = /(?<=a)b/; michael@0: string = 'ab'; michael@0: actualmatch = string.match(pattern); michael@0: expectedmatch = Array('b'); michael@0: addThis(); michael@0: michael@0: status = inSection(236); michael@0: pattern = /(? michael@0: status = inSection(311); michael@0: pattern = /(?>a+)b/; michael@0: string = 'aaab'; michael@0: actualmatch = string.match(pattern); michael@0: expectedmatch = Array('aaab'); michael@0: addThis(); michael@0: */ michael@0: michael@0: status = inSection(312); michael@0: pattern = /([[:]+)/; michael@0: string = 'a:[b]:'; michael@0: actualmatch = string.match(pattern); michael@0: expectedmatch = Array(':[', ':['); michael@0: addThis(); michael@0: michael@0: status = inSection(313); michael@0: pattern = /([[=]+)/; michael@0: string = 'a=[b]='; michael@0: actualmatch = string.match(pattern); michael@0: expectedmatch = Array('=[', '=['); michael@0: addThis(); michael@0: michael@0: status = inSection(314); michael@0: pattern = /([[.]+)/; michael@0: string = 'a.[b].'; michael@0: actualmatch = string.match(pattern); michael@0: expectedmatch = Array('.[', '.['); michael@0: addThis(); michael@0: michael@0: /* ECMA doesn't have rules for [: michael@0: status = inSection(315); michael@0: pattern = /[a[:]b[:c]/; michael@0: string = 'abc'; michael@0: actualmatch = string.match(pattern); michael@0: expectedmatch = Array('abc'); michael@0: addThis(); michael@0: */ michael@0: michael@0: /* ECMA doesn't support (?> michael@0: status = inSection(316); michael@0: pattern = /((?>a+)b)/; michael@0: string = 'aaab'; michael@0: actualmatch = string.match(pattern); michael@0: expectedmatch = Array('aaab', 'aaab'); michael@0: addThis(); michael@0: michael@0: status = inSection(317); michael@0: pattern = /(?>(a+))b/; michael@0: string = 'aaab'; michael@0: actualmatch = string.match(pattern); michael@0: expectedmatch = Array('aaab', 'aaa'); michael@0: addThis(); michael@0: michael@0: status = inSection(318); michael@0: pattern = /((?>[^()]+)|\([^()]*\))+/; michael@0: string = '((abc(ade)ufh()()x'; michael@0: actualmatch = string.match(pattern); michael@0: expectedmatch = Array('abc(ade)ufh()()x', 'x'); michael@0: addThis(); michael@0: */ michael@0: michael@0: /* Perl has \Z has end-of-line, ECMA doesn't michael@0: status = inSection(319); michael@0: pattern = /\Z/; michael@0: string = 'a\nb\n'; michael@0: actualmatch = string.match(pattern); michael@0: expectedmatch = Array(''); michael@0: addThis(); michael@0: michael@0: status = inSection(320); michael@0: pattern = /\z/; michael@0: string = 'a\nb\n'; michael@0: actualmatch = string.match(pattern); michael@0: expectedmatch = Array(''); michael@0: addThis(); michael@0: */ michael@0: michael@0: status = inSection(321); michael@0: pattern = /$/; michael@0: string = 'a\nb\n'; michael@0: actualmatch = string.match(pattern); michael@0: expectedmatch = Array(''); michael@0: addThis(); michael@0: michael@0: /* Perl has \Z has end-of-line, ECMA doesn't michael@0: status = inSection(322); michael@0: pattern = /\Z/; michael@0: string = 'b\na\n'; michael@0: actualmatch = string.match(pattern); michael@0: expectedmatch = Array(''); michael@0: addThis(); michael@0: michael@0: status = inSection(323); michael@0: pattern = /\z/; michael@0: string = 'b\na\n'; michael@0: actualmatch = string.match(pattern); michael@0: expectedmatch = Array(''); michael@0: addThis(); michael@0: */ michael@0: michael@0: status = inSection(324); michael@0: pattern = /$/; michael@0: string = 'b\na\n'; michael@0: actualmatch = string.match(pattern); michael@0: expectedmatch = Array(''); michael@0: addThis(); michael@0: michael@0: /* Perl has \Z has end-of-line, ECMA doesn't michael@0: status = inSection(325); michael@0: pattern = /\Z/; michael@0: string = 'b\na'; michael@0: actualmatch = string.match(pattern); michael@0: expectedmatch = Array(''); michael@0: addThis(); michael@0: michael@0: status = inSection(326); michael@0: pattern = /\z/; michael@0: string = 'b\na'; michael@0: actualmatch = string.match(pattern); michael@0: expectedmatch = Array(''); michael@0: addThis(); michael@0: */ michael@0: michael@0: status = inSection(327); michael@0: pattern = /$/; michael@0: string = 'b\na'; michael@0: actualmatch = string.match(pattern); michael@0: expectedmatch = Array(''); michael@0: addThis(); michael@0: michael@0: /* Perl has \Z has end-of-line, ECMA doesn't michael@0: status = inSection(328); michael@0: pattern = /\Z/m; michael@0: string = 'a\nb\n'; michael@0: actualmatch = string.match(pattern); michael@0: expectedmatch = Array(''); michael@0: addThis(); michael@0: michael@0: status = inSection(329); michael@0: pattern = /\z/m; michael@0: string = 'a\nb\n'; michael@0: actualmatch = string.match(pattern); michael@0: expectedmatch = Array(''); michael@0: addThis(); michael@0: */ michael@0: michael@0: status = inSection(330); michael@0: pattern = /$/m; michael@0: string = 'a\nb\n'; michael@0: actualmatch = string.match(pattern); michael@0: expectedmatch = Array(''); michael@0: addThis(); michael@0: michael@0: /* Perl has \Z has end-of-line, ECMA doesn't michael@0: status = inSection(331); michael@0: pattern = /\Z/m; michael@0: string = 'b\na\n'; michael@0: actualmatch = string.match(pattern); michael@0: expectedmatch = Array(''); michael@0: addThis(); michael@0: michael@0: status = inSection(332); michael@0: pattern = /\z/m; michael@0: string = 'b\na\n'; michael@0: actualmatch = string.match(pattern); michael@0: expectedmatch = Array(''); michael@0: addThis(); michael@0: */ michael@0: michael@0: status = inSection(333); michael@0: pattern = /$/m; michael@0: string = 'b\na\n'; michael@0: actualmatch = string.match(pattern); michael@0: expectedmatch = Array(''); michael@0: addThis(); michael@0: michael@0: /* Perl has \Z has end-of-line, ECMA doesn't michael@0: status = inSection(334); michael@0: pattern = /\Z/m; michael@0: string = 'b\na'; michael@0: actualmatch = string.match(pattern); michael@0: expectedmatch = Array(''); michael@0: addThis(); michael@0: michael@0: status = inSection(335); michael@0: pattern = /\z/m; michael@0: string = 'b\na'; michael@0: actualmatch = string.match(pattern); michael@0: expectedmatch = Array(''); michael@0: addThis(); michael@0: */ michael@0: michael@0: status = inSection(336); michael@0: pattern = /$/m; michael@0: string = 'b\na'; michael@0: actualmatch = string.match(pattern); michael@0: expectedmatch = Array(''); michael@0: addThis(); michael@0: michael@0: /* Perl has \Z has end-of-line, ECMA doesn't michael@0: status = inSection(337); michael@0: pattern = /a\Z/; michael@0: string = 'b\na\n'; michael@0: actualmatch = string.match(pattern); michael@0: expectedmatch = Array('a'); michael@0: addThis(); michael@0: */ michael@0: michael@0: /* $ only matches end of input unless multiline michael@0: status = inSection(338); michael@0: pattern = /a$/; michael@0: string = 'b\na\n'; michael@0: actualmatch = string.match(pattern); michael@0: expectedmatch = Array('a'); michael@0: addThis(); michael@0: */ michael@0: michael@0: /* Perl has \Z has end-of-line, ECMA doesn't michael@0: status = inSection(339); michael@0: pattern = /a\Z/; michael@0: string = 'b\na'; michael@0: actualmatch = string.match(pattern); michael@0: expectedmatch = Array('a'); michael@0: addThis(); michael@0: michael@0: status = inSection(340); michael@0: pattern = /a\z/; michael@0: string = 'b\na'; michael@0: actualmatch = string.match(pattern); michael@0: expectedmatch = Array('a'); michael@0: addThis(); michael@0: */ michael@0: michael@0: status = inSection(341); michael@0: pattern = /a$/; michael@0: string = 'b\na'; michael@0: actualmatch = string.match(pattern); michael@0: expectedmatch = Array('a'); michael@0: addThis(); michael@0: michael@0: status = inSection(342); michael@0: pattern = /a$/m; michael@0: string = 'a\nb\n'; michael@0: actualmatch = string.match(pattern); michael@0: expectedmatch = Array('a'); michael@0: addThis(); michael@0: michael@0: /* Perl has \Z has end-of-line, ECMA doesn't michael@0: status = inSection(343); michael@0: pattern = /a\Z/m; michael@0: string = 'b\na\n'; michael@0: actualmatch = string.match(pattern); michael@0: expectedmatch = Array('a'); michael@0: addThis(); michael@0: */ michael@0: michael@0: status = inSection(344); michael@0: pattern = /a$/m; michael@0: string = 'b\na\n'; michael@0: actualmatch = string.match(pattern); michael@0: expectedmatch = Array('a'); michael@0: addThis(); michael@0: michael@0: /* Perl has \Z has end-of-line, ECMA doesn't michael@0: status = inSection(345); michael@0: pattern = /a\Z/m; michael@0: string = 'b\na'; michael@0: actualmatch = string.match(pattern); michael@0: expectedmatch = Array('a'); michael@0: addThis(); michael@0: michael@0: status = inSection(346); michael@0: pattern = /a\z/m; michael@0: string = 'b\na'; michael@0: actualmatch = string.match(pattern); michael@0: expectedmatch = Array('a'); michael@0: addThis(); michael@0: */ michael@0: michael@0: status = inSection(347); michael@0: pattern = /a$/m; michael@0: string = 'b\na'; michael@0: actualmatch = string.match(pattern); michael@0: expectedmatch = Array('a'); michael@0: addThis(); michael@0: michael@0: /* Perl has \Z has end-of-line, ECMA doesn't michael@0: status = inSection(348); michael@0: pattern = /aa\Z/; michael@0: string = 'b\naa\n'; michael@0: actualmatch = string.match(pattern); michael@0: expectedmatch = Array('aa'); michael@0: addThis(); michael@0: */ michael@0: michael@0: /* $ only matches end of input unless multiline michael@0: status = inSection(349); michael@0: pattern = /aa$/; michael@0: string = 'b\naa\n'; michael@0: actualmatch = string.match(pattern); michael@0: expectedmatch = Array('aa'); michael@0: addThis(); michael@0: */ michael@0: michael@0: /* Perl has \Z has end-of-line, ECMA doesn't michael@0: status = inSection(350); michael@0: pattern = /aa\Z/; michael@0: string = 'b\naa'; michael@0: actualmatch = string.match(pattern); michael@0: expectedmatch = Array('aa'); michael@0: addThis(); michael@0: michael@0: status = inSection(351); michael@0: pattern = /aa\z/; michael@0: string = 'b\naa'; michael@0: actualmatch = string.match(pattern); michael@0: expectedmatch = Array('aa'); michael@0: addThis(); michael@0: */ michael@0: michael@0: status = inSection(352); michael@0: pattern = /aa$/; michael@0: string = 'b\naa'; michael@0: actualmatch = string.match(pattern); michael@0: expectedmatch = Array('aa'); michael@0: addThis(); michael@0: michael@0: status = inSection(353); michael@0: pattern = /aa$/m; michael@0: string = 'aa\nb\n'; michael@0: actualmatch = string.match(pattern); michael@0: expectedmatch = Array('aa'); michael@0: addThis(); michael@0: michael@0: /* Perl has \Z has end-of-line, ECMA doesn't michael@0: status = inSection(354); michael@0: pattern = /aa\Z/m; michael@0: string = 'b\naa\n'; michael@0: actualmatch = string.match(pattern); michael@0: expectedmatch = Array('aa'); michael@0: addThis(); michael@0: */ michael@0: michael@0: status = inSection(355); michael@0: pattern = /aa$/m; michael@0: string = 'b\naa\n'; michael@0: actualmatch = string.match(pattern); michael@0: expectedmatch = Array('aa'); michael@0: addThis(); michael@0: michael@0: /* Perl has \Z has end-of-line, ECMA doesn't michael@0: status = inSection(356); michael@0: pattern = /aa\Z/m; michael@0: string = 'b\naa'; michael@0: actualmatch = string.match(pattern); michael@0: expectedmatch = Array('aa'); michael@0: addThis(); michael@0: michael@0: status = inSection(357); michael@0: pattern = /aa\z/m; michael@0: string = 'b\naa'; michael@0: actualmatch = string.match(pattern); michael@0: expectedmatch = Array('aa'); michael@0: addThis(); michael@0: */ michael@0: michael@0: status = inSection(358); michael@0: pattern = /aa$/m; michael@0: string = 'b\naa'; michael@0: actualmatch = string.match(pattern); michael@0: expectedmatch = Array('aa'); michael@0: addThis(); michael@0: michael@0: /* Perl has \Z has end-of-line, ECMA doesn't michael@0: status = inSection(359); michael@0: pattern = /ab\Z/; michael@0: string = 'b\nab\n'; michael@0: actualmatch = string.match(pattern); michael@0: expectedmatch = Array('ab'); michael@0: addThis(); michael@0: */ michael@0: michael@0: /* $ only matches end of input unless multiline michael@0: status = inSection(360); michael@0: pattern = /ab$/; michael@0: string = 'b\nab\n'; michael@0: actualmatch = string.match(pattern); michael@0: expectedmatch = Array('ab'); michael@0: addThis(); michael@0: */ michael@0: michael@0: /* Perl has \Z has end-of-line, ECMA doesn't michael@0: status = inSection(361); michael@0: pattern = /ab\Z/; michael@0: string = 'b\nab'; michael@0: actualmatch = string.match(pattern); michael@0: expectedmatch = Array('ab'); michael@0: addThis(); michael@0: michael@0: status = inSection(362); michael@0: pattern = /ab\z/; michael@0: string = 'b\nab'; michael@0: actualmatch = string.match(pattern); michael@0: expectedmatch = Array('ab'); michael@0: addThis(); michael@0: */ michael@0: michael@0: status = inSection(363); michael@0: pattern = /ab$/; michael@0: string = 'b\nab'; michael@0: actualmatch = string.match(pattern); michael@0: expectedmatch = Array('ab'); michael@0: addThis(); michael@0: michael@0: status = inSection(364); michael@0: pattern = /ab$/m; michael@0: string = 'ab\nb\n'; michael@0: actualmatch = string.match(pattern); michael@0: expectedmatch = Array('ab'); michael@0: addThis(); michael@0: michael@0: /* Perl has \Z has end-of-line, ECMA doesn't michael@0: status = inSection(365); michael@0: pattern = /ab\Z/m; michael@0: string = 'b\nab\n'; michael@0: actualmatch = string.match(pattern); michael@0: expectedmatch = Array('ab'); michael@0: addThis(); michael@0: */ michael@0: michael@0: status = inSection(366); michael@0: pattern = /ab$/m; michael@0: string = 'b\nab\n'; michael@0: actualmatch = string.match(pattern); michael@0: expectedmatch = Array('ab'); michael@0: addThis(); michael@0: michael@0: /* Perl has \Z has end-of-line, ECMA doesn't michael@0: status = inSection(367); michael@0: pattern = /ab\Z/m; michael@0: string = 'b\nab'; michael@0: actualmatch = string.match(pattern); michael@0: expectedmatch = Array('ab'); michael@0: addThis(); michael@0: michael@0: status = inSection(368); michael@0: pattern = /ab\z/m; michael@0: string = 'b\nab'; michael@0: actualmatch = string.match(pattern); michael@0: expectedmatch = Array('ab'); michael@0: addThis(); michael@0: */ michael@0: michael@0: status = inSection(369); michael@0: pattern = /ab$/m; michael@0: string = 'b\nab'; michael@0: actualmatch = string.match(pattern); michael@0: expectedmatch = Array('ab'); michael@0: addThis(); michael@0: michael@0: /* Perl has \Z has end-of-line, ECMA doesn't michael@0: status = inSection(370); michael@0: pattern = /abb\Z/; michael@0: string = 'b\nabb\n'; michael@0: actualmatch = string.match(pattern); michael@0: expectedmatch = Array('abb'); michael@0: addThis(); michael@0: */ michael@0: michael@0: /* $ only matches end of input unless multiline michael@0: status = inSection(371); michael@0: pattern = /abb$/; michael@0: string = 'b\nabb\n'; michael@0: actualmatch = string.match(pattern); michael@0: expectedmatch = Array('abb'); michael@0: addThis(); michael@0: */ michael@0: michael@0: /* Perl has \Z has end-of-line, ECMA doesn't michael@0: status = inSection(372); michael@0: pattern = /abb\Z/; michael@0: string = 'b\nabb'; michael@0: actualmatch = string.match(pattern); michael@0: expectedmatch = Array('abb'); michael@0: addThis(); michael@0: michael@0: status = inSection(373); michael@0: pattern = /abb\z/; michael@0: string = 'b\nabb'; michael@0: actualmatch = string.match(pattern); michael@0: expectedmatch = Array('abb'); michael@0: addThis(); michael@0: */ michael@0: michael@0: status = inSection(374); michael@0: pattern = /abb$/; michael@0: string = 'b\nabb'; michael@0: actualmatch = string.match(pattern); michael@0: expectedmatch = Array('abb'); michael@0: addThis(); michael@0: michael@0: status = inSection(375); michael@0: pattern = /abb$/m; michael@0: string = 'abb\nb\n'; michael@0: actualmatch = string.match(pattern); michael@0: expectedmatch = Array('abb'); michael@0: addThis(); michael@0: michael@0: /* Perl has \Z has end-of-line, ECMA doesn't michael@0: status = inSection(376); michael@0: pattern = /abb\Z/m; michael@0: string = 'b\nabb\n'; michael@0: actualmatch = string.match(pattern); michael@0: expectedmatch = Array('abb'); michael@0: addThis(); michael@0: */ michael@0: michael@0: status = inSection(377); michael@0: pattern = /abb$/m; michael@0: string = 'b\nabb\n'; michael@0: actualmatch = string.match(pattern); michael@0: expectedmatch = Array('abb'); michael@0: addThis(); michael@0: michael@0: /* Perl has \Z has end-of-line, ECMA doesn't michael@0: status = inSection(378); michael@0: pattern = /abb\Z/m; michael@0: string = 'b\nabb'; michael@0: actualmatch = string.match(pattern); michael@0: expectedmatch = Array('abb'); michael@0: addThis(); michael@0: michael@0: status = inSection(379); michael@0: pattern = /abb\z/m; michael@0: string = 'b\nabb'; michael@0: actualmatch = string.match(pattern); michael@0: expectedmatch = Array('abb'); michael@0: addThis(); michael@0: */ michael@0: michael@0: status = inSection(380); michael@0: pattern = /abb$/m; michael@0: string = 'b\nabb'; michael@0: actualmatch = string.match(pattern); michael@0: expectedmatch = Array('abb'); michael@0: addThis(); michael@0: michael@0: status = inSection(381); michael@0: pattern = /(^|x)(c)/; michael@0: string = 'ca'; michael@0: actualmatch = string.match(pattern); michael@0: expectedmatch = Array('c', '', 'c'); michael@0: addThis(); michael@0: michael@0: status = inSection(382); michael@0: pattern = /foo.bart/; michael@0: string = 'foo.bart'; michael@0: actualmatch = string.match(pattern); michael@0: expectedmatch = Array('foo.bart'); michael@0: addThis(); michael@0: michael@0: status = inSection(383); michael@0: pattern = /^d[x][x][x]/m; michael@0: string = 'abcd\ndxxx'; michael@0: actualmatch = string.match(pattern); michael@0: expectedmatch = Array('dxxx'); michael@0: addThis(); michael@0: michael@0: status = inSection(384); michael@0: pattern = /tt+$/; michael@0: string = 'xxxtt'; michael@0: actualmatch = string.match(pattern); michael@0: expectedmatch = Array('tt'); michael@0: addThis(); michael@0: michael@0: /* ECMA spec says that each atom in a range must be a single character michael@0: status = inSection(385); michael@0: pattern = /([a-\d]+)/; michael@0: string = 'za-9z'; michael@0: actualmatch = string.match(pattern); michael@0: expectedmatch = Array('9', '9'); michael@0: addThis(); michael@0: michael@0: status = inSection(386); michael@0: pattern = /([\d-z]+)/; michael@0: string = 'a0-za'; michael@0: actualmatch = string.match(pattern); michael@0: expectedmatch = Array('0-z', '0-z'); michael@0: addThis(); michael@0: */ michael@0: michael@0: /* ECMA doesn't support [: michael@0: status = inSection(387); michael@0: pattern = /([a-[:digit:]]+)/; michael@0: string = 'za-9z'; michael@0: actualmatch = string.match(pattern); michael@0: expectedmatch = Array('a-9', 'a-9'); michael@0: addThis(); michael@0: michael@0: status = inSection(388); michael@0: pattern = /([[:digit:]-z]+)/; michael@0: string = '=0-z='; michael@0: actualmatch = string.match(pattern); michael@0: expectedmatch = Array('0-z', '0-z'); michael@0: addThis(); michael@0: michael@0: status = inSection(389); michael@0: pattern = /([[:digit:]-[:alpha:]]+)/; michael@0: string = '=0-z='; michael@0: actualmatch = string.match(pattern); michael@0: expectedmatch = Array('0-z', '0-z'); michael@0: addThis(); michael@0: */ michael@0: michael@0: status = inSection(390); michael@0: pattern = /(\d+\.\d+)/; michael@0: string = '3.1415926'; michael@0: actualmatch = string.match(pattern); michael@0: expectedmatch = Array('3.1415926', '3.1415926'); michael@0: addThis(); michael@0: michael@0: status = inSection(391); michael@0: pattern = /\.c(pp|xx|c)?$/i; michael@0: string = 'IO.c'; michael@0: actualmatch = string.match(pattern); michael@0: expectedmatch = Array('.c', undefined); michael@0: addThis(); michael@0: michael@0: status = inSection(392); michael@0: pattern = /(\.c(pp|xx|c)?$)/i; michael@0: string = 'IO.c'; michael@0: actualmatch = string.match(pattern); michael@0: expectedmatch = Array('.c', '.c', undefined); michael@0: addThis(); michael@0: michael@0: status = inSection(393); michael@0: pattern = /(^|a)b/; michael@0: string = 'ab'; michael@0: actualmatch = string.match(pattern); michael@0: expectedmatch = Array('ab', 'a'); michael@0: addThis(); michael@0: michael@0: status = inSection(394); michael@0: pattern = /^([ab]*?)(b)?(c)$/; michael@0: string = 'abac'; michael@0: actualmatch = string.match(pattern); michael@0: expectedmatch = Array('abac', 'aba', undefined, 'c'); michael@0: addThis(); michael@0: michael@0: status = inSection(395); michael@0: pattern = /^(?:.,){2}c/i; michael@0: string = 'a,b,c'; michael@0: actualmatch = string.match(pattern); michael@0: expectedmatch = Array('a,b,c'); michael@0: addThis(); michael@0: michael@0: status = inSection(396); michael@0: pattern = /^(.,){2}c/i; michael@0: string = 'a,b,c'; michael@0: actualmatch = string.match(pattern); michael@0: expectedmatch = Array('a,b,c', 'b,'); michael@0: addThis(); michael@0: michael@0: status = inSection(397); michael@0: pattern = /^(?:[^,]*,){2}c/; michael@0: string = 'a,b,c'; michael@0: actualmatch = string.match(pattern); michael@0: expectedmatch = Array('a,b,c'); michael@0: addThis(); michael@0: michael@0: status = inSection(398); michael@0: pattern = /^([^,]*,){2}c/; michael@0: string = 'a,b,c'; michael@0: actualmatch = string.match(pattern); michael@0: expectedmatch = Array('a,b,c', 'b,'); michael@0: addThis(); michael@0: michael@0: status = inSection(399); michael@0: pattern = /^([^,]*,){3}d/; michael@0: string = 'aaa,b,c,d'; michael@0: actualmatch = string.match(pattern); michael@0: expectedmatch = Array('aaa,b,c,d', 'c,'); michael@0: addThis(); michael@0: michael@0: status = inSection(400); michael@0: pattern = /^([^,]*,){3,}d/; michael@0: string = 'aaa,b,c,d'; michael@0: actualmatch = string.match(pattern); michael@0: expectedmatch = Array('aaa,b,c,d', 'c,'); michael@0: addThis(); michael@0: michael@0: status = inSection(401); michael@0: pattern = /^([^,]*,){0,3}d/; michael@0: string = 'aaa,b,c,d'; michael@0: actualmatch = string.match(pattern); michael@0: expectedmatch = Array('aaa,b,c,d', 'c,'); michael@0: addThis(); michael@0: michael@0: status = inSection(402); michael@0: pattern = /^([^,]{1,3},){3}d/i; michael@0: string = 'aaa,b,c,d'; michael@0: actualmatch = string.match(pattern); michael@0: expectedmatch = Array('aaa,b,c,d', 'c,'); michael@0: addThis(); michael@0: michael@0: status = inSection(403); michael@0: pattern = /^([^,]{1,3},){3,}d/; michael@0: string = 'aaa,b,c,d'; michael@0: actualmatch = string.match(pattern); michael@0: expectedmatch = Array('aaa,b,c,d', 'c,'); michael@0: addThis(); michael@0: michael@0: status = inSection(404); michael@0: pattern = /^([^,]{1,3},){0,3}d/; michael@0: string = 'aaa,b,c,d'; michael@0: actualmatch = string.match(pattern); michael@0: expectedmatch = Array('aaa,b,c,d', 'c,'); michael@0: addThis(); michael@0: michael@0: status = inSection(405); michael@0: pattern = /^([^,]{1,},){3}d/; michael@0: string = 'aaa,b,c,d'; michael@0: actualmatch = string.match(pattern); michael@0: expectedmatch = Array('aaa,b,c,d', 'c,'); michael@0: addThis(); michael@0: michael@0: status = inSection(406); michael@0: pattern = /^([^,]{1,},){3,}d/; michael@0: string = 'aaa,b,c,d'; michael@0: actualmatch = string.match(pattern); michael@0: expectedmatch = Array('aaa,b,c,d', 'c,'); michael@0: addThis(); michael@0: michael@0: status = inSection(407); michael@0: pattern = /^([^,]{1,},){0,3}d/; michael@0: string = 'aaa,b,c,d'; michael@0: actualmatch = string.match(pattern); michael@0: expectedmatch = Array('aaa,b,c,d', 'c,'); michael@0: addThis(); michael@0: michael@0: status = inSection(408); michael@0: pattern = /^([^,]{0,3},){3}d/i; michael@0: string = 'aaa,b,c,d'; michael@0: actualmatch = string.match(pattern); michael@0: expectedmatch = Array('aaa,b,c,d', 'c,'); michael@0: addThis(); michael@0: michael@0: status = inSection(409); michael@0: pattern = /^([^,]{0,3},){3,}d/; michael@0: string = 'aaa,b,c,d'; michael@0: actualmatch = string.match(pattern); michael@0: expectedmatch = Array('aaa,b,c,d', 'c,'); michael@0: addThis(); michael@0: michael@0: status = inSection(410); michael@0: pattern = /^([^,]{0,3},){0,3}d/; michael@0: string = 'aaa,b,c,d'; michael@0: actualmatch = string.match(pattern); michael@0: expectedmatch = Array('aaa,b,c,d', 'c,'); michael@0: addThis(); michael@0: michael@0: /* ECMA doesn't support \A michael@0: status = inSection(411); michael@0: pattern = /(?!\A)x/m; michael@0: string = 'a\nxb\n'; michael@0: actualmatch = string.match(pattern); michael@0: expectedmatch = Array('\n'); michael@0: addThis(); michael@0: */ michael@0: michael@0: status = inSection(412); michael@0: pattern = /^(a(b)?)+$/; michael@0: string = 'aba'; michael@0: actualmatch = string.match(pattern); michael@0: expectedmatch = Array('aba', 'a', undefined); michael@0: addThis(); michael@0: michael@0: status = inSection(413); michael@0: pattern = /^(aa(bb)?)+$/; michael@0: string = 'aabbaa'; michael@0: actualmatch = string.match(pattern); michael@0: expectedmatch = Array('aabbaa', 'aa', undefined); michael@0: addThis(); michael@0: michael@0: status = inSection(414); michael@0: pattern = /^.{9}abc.*\n/m; michael@0: string = '123\nabcabcabcabc\n'; michael@0: actualmatch = string.match(pattern); michael@0: expectedmatch = Array('abcabcabcabc\n'); michael@0: addThis(); michael@0: michael@0: status = inSection(415); michael@0: pattern = /^(a)?a$/; michael@0: string = 'a'; michael@0: actualmatch = string.match(pattern); michael@0: expectedmatch = Array('a', undefined); michael@0: addThis(); michael@0: michael@0: status = inSection(416); michael@0: pattern = /^(a\1?)(a\1?)(a\2?)(a\3?)$/; michael@0: string = 'aaaaaa'; michael@0: actualmatch = string.match(pattern); michael@0: expectedmatch = Array('aaaaaa', 'a', 'aa', 'a', 'aa'); michael@0: addThis(); michael@0: michael@0: /* Can't refer to a capture before it's encountered & completed michael@0: status = inSection(417); michael@0: pattern = /^(a\1?){4}$/; michael@0: string = 'aaaaaa'; michael@0: actualmatch = string.match(pattern); michael@0: expectedmatch = Array('aaaaaa', 'aaa'); michael@0: addThis(); michael@0: */ michael@0: michael@0: status = inSection(418); michael@0: pattern = /^(0+)?(?:x(1))?/; michael@0: string = 'x1'; michael@0: actualmatch = string.match(pattern); michael@0: expectedmatch = Array('x1', undefined, '1'); michael@0: addThis(); michael@0: michael@0: status = inSection(419); michael@0: pattern = /^([0-9a-fA-F]+)(?:x([0-9a-fA-F]+)?)(?:x([0-9a-fA-F]+))?/; michael@0: string = '012cxx0190'; michael@0: actualmatch = string.match(pattern); michael@0: expectedmatch = Array('012cxx0190', '012c', undefined, '0190'); michael@0: addThis(); michael@0: michael@0: status = inSection(420); michael@0: pattern = /^(b+?|a){1,2}c/; michael@0: string = 'bbbac'; michael@0: actualmatch = string.match(pattern); michael@0: expectedmatch = Array('bbbac', 'a'); michael@0: addThis(); michael@0: michael@0: status = inSection(421); michael@0: pattern = /^(b+?|a){1,2}c/; michael@0: string = 'bbbbac'; michael@0: actualmatch = string.match(pattern); michael@0: expectedmatch = Array('bbbbac', 'a'); michael@0: addThis(); michael@0: michael@0: status = inSection(422); michael@0: pattern = /((?:aaaa|bbbb)cccc)?/; michael@0: string = 'aaaacccc'; michael@0: actualmatch = string.match(pattern); michael@0: expectedmatch = Array('aaaacccc', 'aaaacccc'); michael@0: addThis(); michael@0: michael@0: status = inSection(423); michael@0: pattern = /((?:aaaa|bbbb)cccc)?/; michael@0: string = 'bbbbcccc'; michael@0: actualmatch = string.match(pattern); michael@0: expectedmatch = Array('bbbbcccc', 'bbbbcccc'); michael@0: addThis(); michael@0: michael@0: michael@0: michael@0: michael@0: //----------------------------------------------------------------------------- michael@0: test(); michael@0: //----------------------------------------------------------------------------- michael@0: michael@0: michael@0: michael@0: function addThis() michael@0: { michael@0: if(omitCurrentSection()) michael@0: return; michael@0: michael@0: statusmessages[i] = status; michael@0: patterns[i] = pattern; michael@0: strings[i] = string; michael@0: actualmatches[i] = actualmatch; michael@0: expectedmatches[i] = expectedmatch; michael@0: i++; michael@0: } michael@0: michael@0: michael@0: function omitCurrentSection() michael@0: { michael@0: try michael@0: { michael@0: // current section number is in global status variable michael@0: var n = status.match(/(\d+)/)[1]; michael@0: return ((n < cnLBOUND) || (n > cnUBOUND)); michael@0: } michael@0: catch(e) michael@0: { michael@0: return false; michael@0: } michael@0: } michael@0: michael@0: michael@0: function test() michael@0: { michael@0: enterFunc ('test'); michael@0: printBugNumber(BUGNUMBER); michael@0: printStatus (summary); michael@0: testRegExp(statusmessages, patterns, strings, actualmatches, expectedmatches); michael@0: exitFunc ('test'); michael@0: }