1.1 --- /dev/null Thu Jan 01 00:00:00 1970 +0000 1.2 +++ b/js/src/tests/ecma_3/RegExp/perlstress-001.js Wed Dec 31 06:09:35 2014 +0100 1.3 @@ -0,0 +1,3196 @@ 1.4 +/* -*- Mode: C++; tab-width: 2; indent-tabs-mode: nil; c-basic-offset: 2 -*- */ 1.5 +/* This Source Code Form is subject to the terms of the Mozilla Public 1.6 + * License, v. 2.0. If a copy of the MPL was not distributed with this 1.7 + * file, You can obtain one at http://mozilla.org/MPL/2.0/. */ 1.8 + 1.9 +/* 1.10 + * 1.11 + * Date: 2002-07-07 1.12 + * SUMMARY: Testing JS RegExp engine against Perl 5 RegExp engine. 1.13 + * Adjust cnLBOUND, cnUBOUND below to restrict which sections are tested. 1.14 + * 1.15 + * This test was created by running various patterns and strings through the 1.16 + * Perl 5 RegExp engine. We saved the results below to test the JS engine. 1.17 + * 1.18 + * NOTE: ECMA/JS and Perl do differ on certain points. We have either commented 1.19 + * out such sections altogether, or modified them to fit what we expect from JS. 1.20 + * 1.21 + * EXAMPLES: 1.22 + * 1.23 + * - In JS, regexp captures (/(a) etc./) must hold |undefined| if not used. 1.24 + * See http://bugzilla.mozilla.org/show_bug.cgi?id=123437. 1.25 + * By contrast, in Perl, unmatched captures hold the empty string. 1.26 + * We have modified such sections accordingly. Example: 1.27 + 1.28 + pattern = /^([^a-z])|(\^)$/; 1.29 + string = '.'; 1.30 + actualmatch = string.match(pattern); 1.31 + //expectedmatch = Array('.', '.', ''); <<<--- Perl 1.32 + expectedmatch = Array('.', '.', undefined); <<<--- JS 1.33 + addThis(); 1.34 + 1.35 + 1.36 + * - In JS, you can't refer to a capture before it's encountered & completed 1.37 + * 1.38 + * - Perl supports ] & ^] inside a [], ECMA does not 1.39 + * 1.40 + * - ECMA does support (?: (?= and (?! operators, but doesn't support (?< etc. 1.41 + * 1.42 + * - ECMA doesn't support (?imsx or (?-imsx 1.43 + * 1.44 + * - ECMA doesn't support (?(condition) 1.45 + * 1.46 + * - Perl has \Z has end-of-line, ECMA doesn't 1.47 + * 1.48 + * - In ECMA, ^ matches only the empty string before the first character 1.49 + * 1.50 + * - In ECMA, $ matches only the empty string at end of input (unless multiline) 1.51 + * 1.52 + * - ECMA spec says that each atom in a range must be a single character 1.53 + * 1.54 + * - ECMA doesn't support \A 1.55 + * 1.56 + * - ECMA doesn't have rules for [: 1.57 + * 1.58 + */ 1.59 +//----------------------------------------------------------------------------- 1.60 +var i = 0; 1.61 +var BUGNUMBER = 85721; 1.62 +var summary = 'Testing regular expression edge cases'; 1.63 +var cnSingleSpace = ' '; 1.64 +var status = ''; 1.65 +var statusmessages = new Array(); 1.66 +var pattern = ''; 1.67 +var patterns = new Array(); 1.68 +var string = ''; 1.69 +var strings = new Array(); 1.70 +var actualmatch = ''; 1.71 +var actualmatches = new Array(); 1.72 +var expectedmatch = ''; 1.73 +var expectedmatches = new Array(); 1.74 +var cnLBOUND = 1; 1.75 +var cnUBOUND = 1000; 1.76 + 1.77 + 1.78 +status = inSection(1); 1.79 +pattern = /abc/; 1.80 +string = 'abc'; 1.81 +actualmatch = string.match(pattern); 1.82 +expectedmatch = Array('abc'); 1.83 +addThis(); 1.84 + 1.85 +status = inSection(2); 1.86 +pattern = /abc/; 1.87 +string = 'xabcy'; 1.88 +actualmatch = string.match(pattern); 1.89 +expectedmatch = Array('abc'); 1.90 +addThis(); 1.91 + 1.92 +status = inSection(3); 1.93 +pattern = /abc/; 1.94 +string = 'ababc'; 1.95 +actualmatch = string.match(pattern); 1.96 +expectedmatch = Array('abc'); 1.97 +addThis(); 1.98 + 1.99 +status = inSection(4); 1.100 +pattern = /ab*c/; 1.101 +string = 'abc'; 1.102 +actualmatch = string.match(pattern); 1.103 +expectedmatch = Array('abc'); 1.104 +addThis(); 1.105 + 1.106 +status = inSection(5); 1.107 +pattern = /ab*bc/; 1.108 +string = 'abc'; 1.109 +actualmatch = string.match(pattern); 1.110 +expectedmatch = Array('abc'); 1.111 +addThis(); 1.112 + 1.113 +status = inSection(6); 1.114 +pattern = /ab*bc/; 1.115 +string = 'abbc'; 1.116 +actualmatch = string.match(pattern); 1.117 +expectedmatch = Array('abbc'); 1.118 +addThis(); 1.119 + 1.120 +status = inSection(7); 1.121 +pattern = /ab*bc/; 1.122 +string = 'abbbbc'; 1.123 +actualmatch = string.match(pattern); 1.124 +expectedmatch = Array('abbbbc'); 1.125 +addThis(); 1.126 + 1.127 +status = inSection(8); 1.128 +pattern = /.{1}/; 1.129 +string = 'abbbbc'; 1.130 +actualmatch = string.match(pattern); 1.131 +expectedmatch = Array('a'); 1.132 +addThis(); 1.133 + 1.134 +status = inSection(9); 1.135 +pattern = /.{3,4}/; 1.136 +string = 'abbbbc'; 1.137 +actualmatch = string.match(pattern); 1.138 +expectedmatch = Array('abbb'); 1.139 +addThis(); 1.140 + 1.141 +status = inSection(10); 1.142 +pattern = /ab{0,}bc/; 1.143 +string = 'abbbbc'; 1.144 +actualmatch = string.match(pattern); 1.145 +expectedmatch = Array('abbbbc'); 1.146 +addThis(); 1.147 + 1.148 +status = inSection(11); 1.149 +pattern = /ab+bc/; 1.150 +string = 'abbc'; 1.151 +actualmatch = string.match(pattern); 1.152 +expectedmatch = Array('abbc'); 1.153 +addThis(); 1.154 + 1.155 +status = inSection(12); 1.156 +pattern = /ab+bc/; 1.157 +string = 'abbbbc'; 1.158 +actualmatch = string.match(pattern); 1.159 +expectedmatch = Array('abbbbc'); 1.160 +addThis(); 1.161 + 1.162 +status = inSection(13); 1.163 +pattern = /ab{1,}bc/; 1.164 +string = 'abbbbc'; 1.165 +actualmatch = string.match(pattern); 1.166 +expectedmatch = Array('abbbbc'); 1.167 +addThis(); 1.168 + 1.169 +status = inSection(14); 1.170 +pattern = /ab{1,3}bc/; 1.171 +string = 'abbbbc'; 1.172 +actualmatch = string.match(pattern); 1.173 +expectedmatch = Array('abbbbc'); 1.174 +addThis(); 1.175 + 1.176 +status = inSection(15); 1.177 +pattern = /ab{3,4}bc/; 1.178 +string = 'abbbbc'; 1.179 +actualmatch = string.match(pattern); 1.180 +expectedmatch = Array('abbbbc'); 1.181 +addThis(); 1.182 + 1.183 +status = inSection(16); 1.184 +pattern = /ab?bc/; 1.185 +string = 'abbc'; 1.186 +actualmatch = string.match(pattern); 1.187 +expectedmatch = Array('abbc'); 1.188 +addThis(); 1.189 + 1.190 +status = inSection(17); 1.191 +pattern = /ab?bc/; 1.192 +string = 'abc'; 1.193 +actualmatch = string.match(pattern); 1.194 +expectedmatch = Array('abc'); 1.195 +addThis(); 1.196 + 1.197 +status = inSection(18); 1.198 +pattern = /ab{0,1}bc/; 1.199 +string = 'abc'; 1.200 +actualmatch = string.match(pattern); 1.201 +expectedmatch = Array('abc'); 1.202 +addThis(); 1.203 + 1.204 +status = inSection(19); 1.205 +pattern = /ab?c/; 1.206 +string = 'abc'; 1.207 +actualmatch = string.match(pattern); 1.208 +expectedmatch = Array('abc'); 1.209 +addThis(); 1.210 + 1.211 +status = inSection(20); 1.212 +pattern = /ab{0,1}c/; 1.213 +string = 'abc'; 1.214 +actualmatch = string.match(pattern); 1.215 +expectedmatch = Array('abc'); 1.216 +addThis(); 1.217 + 1.218 +status = inSection(21); 1.219 +pattern = /^abc$/; 1.220 +string = 'abc'; 1.221 +actualmatch = string.match(pattern); 1.222 +expectedmatch = Array('abc'); 1.223 +addThis(); 1.224 + 1.225 +status = inSection(22); 1.226 +pattern = /^abc/; 1.227 +string = 'abcc'; 1.228 +actualmatch = string.match(pattern); 1.229 +expectedmatch = Array('abc'); 1.230 +addThis(); 1.231 + 1.232 +status = inSection(23); 1.233 +pattern = /abc$/; 1.234 +string = 'aabc'; 1.235 +actualmatch = string.match(pattern); 1.236 +expectedmatch = Array('abc'); 1.237 +addThis(); 1.238 + 1.239 +status = inSection(24); 1.240 +pattern = /^/; 1.241 +string = 'abc'; 1.242 +actualmatch = string.match(pattern); 1.243 +expectedmatch = Array(''); 1.244 +addThis(); 1.245 + 1.246 +status = inSection(25); 1.247 +pattern = /$/; 1.248 +string = 'abc'; 1.249 +actualmatch = string.match(pattern); 1.250 +expectedmatch = Array(''); 1.251 +addThis(); 1.252 + 1.253 +status = inSection(26); 1.254 +pattern = /a.c/; 1.255 +string = 'abc'; 1.256 +actualmatch = string.match(pattern); 1.257 +expectedmatch = Array('abc'); 1.258 +addThis(); 1.259 + 1.260 +status = inSection(27); 1.261 +pattern = /a.c/; 1.262 +string = 'axc'; 1.263 +actualmatch = string.match(pattern); 1.264 +expectedmatch = Array('axc'); 1.265 +addThis(); 1.266 + 1.267 +status = inSection(28); 1.268 +pattern = /a.*c/; 1.269 +string = 'axyzc'; 1.270 +actualmatch = string.match(pattern); 1.271 +expectedmatch = Array('axyzc'); 1.272 +addThis(); 1.273 + 1.274 +status = inSection(29); 1.275 +pattern = /a[bc]d/; 1.276 +string = 'abd'; 1.277 +actualmatch = string.match(pattern); 1.278 +expectedmatch = Array('abd'); 1.279 +addThis(); 1.280 + 1.281 +status = inSection(30); 1.282 +pattern = /a[b-d]e/; 1.283 +string = 'ace'; 1.284 +actualmatch = string.match(pattern); 1.285 +expectedmatch = Array('ace'); 1.286 +addThis(); 1.287 + 1.288 +status = inSection(31); 1.289 +pattern = /a[b-d]/; 1.290 +string = 'aac'; 1.291 +actualmatch = string.match(pattern); 1.292 +expectedmatch = Array('ac'); 1.293 +addThis(); 1.294 + 1.295 +status = inSection(32); 1.296 +pattern = /a[-b]/; 1.297 +string = 'a-'; 1.298 +actualmatch = string.match(pattern); 1.299 +expectedmatch = Array('a-'); 1.300 +addThis(); 1.301 + 1.302 +status = inSection(33); 1.303 +pattern = /a[b-]/; 1.304 +string = 'a-'; 1.305 +actualmatch = string.match(pattern); 1.306 +expectedmatch = Array('a-'); 1.307 +addThis(); 1.308 + 1.309 +status = inSection(34); 1.310 +pattern = /a]/; 1.311 +string = 'a]'; 1.312 +actualmatch = string.match(pattern); 1.313 +expectedmatch = Array('a]'); 1.314 +addThis(); 1.315 + 1.316 +/* Perl supports ] & ^] inside a [], ECMA does not 1.317 + pattern = /a[]]b/; 1.318 + status = inSection(35); 1.319 + string = 'a]b'; 1.320 + actualmatch = string.match(pattern); 1.321 + expectedmatch = Array('a]b'); 1.322 + addThis(); 1.323 +*/ 1.324 + 1.325 +status = inSection(36); 1.326 +pattern = /a[^bc]d/; 1.327 +string = 'aed'; 1.328 +actualmatch = string.match(pattern); 1.329 +expectedmatch = Array('aed'); 1.330 +addThis(); 1.331 + 1.332 +status = inSection(37); 1.333 +pattern = /a[^-b]c/; 1.334 +string = 'adc'; 1.335 +actualmatch = string.match(pattern); 1.336 +expectedmatch = Array('adc'); 1.337 +addThis(); 1.338 + 1.339 +/* Perl supports ] & ^] inside a [], ECMA does not 1.340 + status = inSection(38); 1.341 + pattern = /a[^]b]c/; 1.342 + string = 'adc'; 1.343 + actualmatch = string.match(pattern); 1.344 + expectedmatch = Array('adc'); 1.345 + addThis(); 1.346 +*/ 1.347 + 1.348 +status = inSection(39); 1.349 +pattern = /\ba\b/; 1.350 +string = 'a-'; 1.351 +actualmatch = string.match(pattern); 1.352 +expectedmatch = Array('a'); 1.353 +addThis(); 1.354 + 1.355 +status = inSection(40); 1.356 +pattern = /\ba\b/; 1.357 +string = '-a'; 1.358 +actualmatch = string.match(pattern); 1.359 +expectedmatch = Array('a'); 1.360 +addThis(); 1.361 + 1.362 +status = inSection(41); 1.363 +pattern = /\ba\b/; 1.364 +string = '-a-'; 1.365 +actualmatch = string.match(pattern); 1.366 +expectedmatch = Array('a'); 1.367 +addThis(); 1.368 + 1.369 +status = inSection(42); 1.370 +pattern = /\By\b/; 1.371 +string = 'xy'; 1.372 +actualmatch = string.match(pattern); 1.373 +expectedmatch = Array('y'); 1.374 +addThis(); 1.375 + 1.376 +status = inSection(43); 1.377 +pattern = /\by\B/; 1.378 +string = 'yz'; 1.379 +actualmatch = string.match(pattern); 1.380 +expectedmatch = Array('y'); 1.381 +addThis(); 1.382 + 1.383 +status = inSection(44); 1.384 +pattern = /\By\B/; 1.385 +string = 'xyz'; 1.386 +actualmatch = string.match(pattern); 1.387 +expectedmatch = Array('y'); 1.388 +addThis(); 1.389 + 1.390 +status = inSection(45); 1.391 +pattern = /\w/; 1.392 +string = 'a'; 1.393 +actualmatch = string.match(pattern); 1.394 +expectedmatch = Array('a'); 1.395 +addThis(); 1.396 + 1.397 +status = inSection(46); 1.398 +pattern = /\W/; 1.399 +string = '-'; 1.400 +actualmatch = string.match(pattern); 1.401 +expectedmatch = Array('-'); 1.402 +addThis(); 1.403 + 1.404 +status = inSection(47); 1.405 +pattern = /a\Sb/; 1.406 +string = 'a-b'; 1.407 +actualmatch = string.match(pattern); 1.408 +expectedmatch = Array('a-b'); 1.409 +addThis(); 1.410 + 1.411 +status = inSection(48); 1.412 +pattern = /\d/; 1.413 +string = '1'; 1.414 +actualmatch = string.match(pattern); 1.415 +expectedmatch = Array('1'); 1.416 +addThis(); 1.417 + 1.418 +status = inSection(49); 1.419 +pattern = /\D/; 1.420 +string = '-'; 1.421 +actualmatch = string.match(pattern); 1.422 +expectedmatch = Array('-'); 1.423 +addThis(); 1.424 + 1.425 +status = inSection(50); 1.426 +pattern = /[\w]/; 1.427 +string = 'a'; 1.428 +actualmatch = string.match(pattern); 1.429 +expectedmatch = Array('a'); 1.430 +addThis(); 1.431 + 1.432 +status = inSection(51); 1.433 +pattern = /[\W]/; 1.434 +string = '-'; 1.435 +actualmatch = string.match(pattern); 1.436 +expectedmatch = Array('-'); 1.437 +addThis(); 1.438 + 1.439 +status = inSection(52); 1.440 +pattern = /a[\S]b/; 1.441 +string = 'a-b'; 1.442 +actualmatch = string.match(pattern); 1.443 +expectedmatch = Array('a-b'); 1.444 +addThis(); 1.445 + 1.446 +status = inSection(53); 1.447 +pattern = /[\d]/; 1.448 +string = '1'; 1.449 +actualmatch = string.match(pattern); 1.450 +expectedmatch = Array('1'); 1.451 +addThis(); 1.452 + 1.453 +status = inSection(54); 1.454 +pattern = /[\D]/; 1.455 +string = '-'; 1.456 +actualmatch = string.match(pattern); 1.457 +expectedmatch = Array('-'); 1.458 +addThis(); 1.459 + 1.460 +status = inSection(55); 1.461 +pattern = /ab|cd/; 1.462 +string = 'abc'; 1.463 +actualmatch = string.match(pattern); 1.464 +expectedmatch = Array('ab'); 1.465 +addThis(); 1.466 + 1.467 +status = inSection(56); 1.468 +pattern = /ab|cd/; 1.469 +string = 'abcd'; 1.470 +actualmatch = string.match(pattern); 1.471 +expectedmatch = Array('ab'); 1.472 +addThis(); 1.473 + 1.474 +status = inSection(57); 1.475 +pattern = /()ef/; 1.476 +string = 'def'; 1.477 +actualmatch = string.match(pattern); 1.478 +expectedmatch = Array('ef', ''); 1.479 +addThis(); 1.480 + 1.481 +status = inSection(58); 1.482 +pattern = /a\(b/; 1.483 +string = 'a(b'; 1.484 +actualmatch = string.match(pattern); 1.485 +expectedmatch = Array('a(b'); 1.486 +addThis(); 1.487 + 1.488 +status = inSection(59); 1.489 +pattern = /a\(*b/; 1.490 +string = 'ab'; 1.491 +actualmatch = string.match(pattern); 1.492 +expectedmatch = Array('ab'); 1.493 +addThis(); 1.494 + 1.495 +status = inSection(60); 1.496 +pattern = /a\(*b/; 1.497 +string = 'a((b'; 1.498 +actualmatch = string.match(pattern); 1.499 +expectedmatch = Array('a((b'); 1.500 +addThis(); 1.501 + 1.502 +status = inSection(61); 1.503 +pattern = /a\\b/; 1.504 +string = 'a\\b'; 1.505 +actualmatch = string.match(pattern); 1.506 +expectedmatch = Array('a\\b'); 1.507 +addThis(); 1.508 + 1.509 +status = inSection(62); 1.510 +pattern = /((a))/; 1.511 +string = 'abc'; 1.512 +actualmatch = string.match(pattern); 1.513 +expectedmatch = Array('a', 'a', 'a'); 1.514 +addThis(); 1.515 + 1.516 +status = inSection(63); 1.517 +pattern = /(a)b(c)/; 1.518 +string = 'abc'; 1.519 +actualmatch = string.match(pattern); 1.520 +expectedmatch = Array('abc', 'a', 'c'); 1.521 +addThis(); 1.522 + 1.523 +status = inSection(64); 1.524 +pattern = /a+b+c/; 1.525 +string = 'aabbabc'; 1.526 +actualmatch = string.match(pattern); 1.527 +expectedmatch = Array('abc'); 1.528 +addThis(); 1.529 + 1.530 +status = inSection(65); 1.531 +pattern = /a{1,}b{1,}c/; 1.532 +string = 'aabbabc'; 1.533 +actualmatch = string.match(pattern); 1.534 +expectedmatch = Array('abc'); 1.535 +addThis(); 1.536 + 1.537 +status = inSection(66); 1.538 +pattern = /a.+?c/; 1.539 +string = 'abcabc'; 1.540 +actualmatch = string.match(pattern); 1.541 +expectedmatch = Array('abc'); 1.542 +addThis(); 1.543 + 1.544 +status = inSection(67); 1.545 +pattern = /(a+|b)*/; 1.546 +string = 'ab'; 1.547 +actualmatch = string.match(pattern); 1.548 +expectedmatch = Array('ab', 'b'); 1.549 +addThis(); 1.550 + 1.551 +status = inSection(68); 1.552 +pattern = /(a+|b){0,}/; 1.553 +string = 'ab'; 1.554 +actualmatch = string.match(pattern); 1.555 +expectedmatch = Array('ab', 'b'); 1.556 +addThis(); 1.557 + 1.558 +status = inSection(69); 1.559 +pattern = /(a+|b)+/; 1.560 +string = 'ab'; 1.561 +actualmatch = string.match(pattern); 1.562 +expectedmatch = Array('ab', 'b'); 1.563 +addThis(); 1.564 + 1.565 +status = inSection(70); 1.566 +pattern = /(a+|b){1,}/; 1.567 +string = 'ab'; 1.568 +actualmatch = string.match(pattern); 1.569 +expectedmatch = Array('ab', 'b'); 1.570 +addThis(); 1.571 + 1.572 +status = inSection(71); 1.573 +pattern = /(a+|b)?/; 1.574 +string = 'ab'; 1.575 +actualmatch = string.match(pattern); 1.576 +expectedmatch = Array('a', 'a'); 1.577 +addThis(); 1.578 + 1.579 +status = inSection(72); 1.580 +pattern = /(a+|b){0,1}/; 1.581 +string = 'ab'; 1.582 +actualmatch = string.match(pattern); 1.583 +expectedmatch = Array('a', 'a'); 1.584 +addThis(); 1.585 + 1.586 +status = inSection(73); 1.587 +pattern = /[^ab]*/; 1.588 +string = 'cde'; 1.589 +actualmatch = string.match(pattern); 1.590 +expectedmatch = Array('cde'); 1.591 +addThis(); 1.592 + 1.593 +status = inSection(74); 1.594 +pattern = /([abc])*d/; 1.595 +string = 'abbbcd'; 1.596 +actualmatch = string.match(pattern); 1.597 +expectedmatch = Array('abbbcd', 'c'); 1.598 +addThis(); 1.599 + 1.600 +status = inSection(75); 1.601 +pattern = /([abc])*bcd/; 1.602 +string = 'abcd'; 1.603 +actualmatch = string.match(pattern); 1.604 +expectedmatch = Array('abcd', 'a'); 1.605 +addThis(); 1.606 + 1.607 +status = inSection(76); 1.608 +pattern = /a|b|c|d|e/; 1.609 +string = 'e'; 1.610 +actualmatch = string.match(pattern); 1.611 +expectedmatch = Array('e'); 1.612 +addThis(); 1.613 + 1.614 +status = inSection(77); 1.615 +pattern = /(a|b|c|d|e)f/; 1.616 +string = 'ef'; 1.617 +actualmatch = string.match(pattern); 1.618 +expectedmatch = Array('ef', 'e'); 1.619 +addThis(); 1.620 + 1.621 +status = inSection(78); 1.622 +pattern = /abcd*efg/; 1.623 +string = 'abcdefg'; 1.624 +actualmatch = string.match(pattern); 1.625 +expectedmatch = Array('abcdefg'); 1.626 +addThis(); 1.627 + 1.628 +status = inSection(79); 1.629 +pattern = /ab*/; 1.630 +string = 'xabyabbbz'; 1.631 +actualmatch = string.match(pattern); 1.632 +expectedmatch = Array('ab'); 1.633 +addThis(); 1.634 + 1.635 +status = inSection(80); 1.636 +pattern = /ab*/; 1.637 +string = 'xayabbbz'; 1.638 +actualmatch = string.match(pattern); 1.639 +expectedmatch = Array('a'); 1.640 +addThis(); 1.641 + 1.642 +status = inSection(81); 1.643 +pattern = /(ab|cd)e/; 1.644 +string = 'abcde'; 1.645 +actualmatch = string.match(pattern); 1.646 +expectedmatch = Array('cde', 'cd'); 1.647 +addThis(); 1.648 + 1.649 +status = inSection(82); 1.650 +pattern = /[abhgefdc]ij/; 1.651 +string = 'hij'; 1.652 +actualmatch = string.match(pattern); 1.653 +expectedmatch = Array('hij'); 1.654 +addThis(); 1.655 + 1.656 +status = inSection(83); 1.657 +pattern = /(abc|)ef/; 1.658 +string = 'abcdef'; 1.659 +actualmatch = string.match(pattern); 1.660 +expectedmatch = Array('ef', ''); 1.661 +addThis(); 1.662 + 1.663 +status = inSection(84); 1.664 +pattern = /(a|b)c*d/; 1.665 +string = 'abcd'; 1.666 +actualmatch = string.match(pattern); 1.667 +expectedmatch = Array('bcd', 'b'); 1.668 +addThis(); 1.669 + 1.670 +status = inSection(85); 1.671 +pattern = /(ab|ab*)bc/; 1.672 +string = 'abc'; 1.673 +actualmatch = string.match(pattern); 1.674 +expectedmatch = Array('abc', 'a'); 1.675 +addThis(); 1.676 + 1.677 +status = inSection(86); 1.678 +pattern = /a([bc]*)c*/; 1.679 +string = 'abc'; 1.680 +actualmatch = string.match(pattern); 1.681 +expectedmatch = Array('abc', 'bc'); 1.682 +addThis(); 1.683 + 1.684 +status = inSection(87); 1.685 +pattern = /a([bc]*)(c*d)/; 1.686 +string = 'abcd'; 1.687 +actualmatch = string.match(pattern); 1.688 +expectedmatch = Array('abcd', 'bc', 'd'); 1.689 +addThis(); 1.690 + 1.691 +status = inSection(88); 1.692 +pattern = /a([bc]+)(c*d)/; 1.693 +string = 'abcd'; 1.694 +actualmatch = string.match(pattern); 1.695 +expectedmatch = Array('abcd', 'bc', 'd'); 1.696 +addThis(); 1.697 + 1.698 +status = inSection(89); 1.699 +pattern = /a([bc]*)(c+d)/; 1.700 +string = 'abcd'; 1.701 +actualmatch = string.match(pattern); 1.702 +expectedmatch = Array('abcd', 'b', 'cd'); 1.703 +addThis(); 1.704 + 1.705 +status = inSection(90); 1.706 +pattern = /a[bcd]*dcdcde/; 1.707 +string = 'adcdcde'; 1.708 +actualmatch = string.match(pattern); 1.709 +expectedmatch = Array('adcdcde'); 1.710 +addThis(); 1.711 + 1.712 +status = inSection(91); 1.713 +pattern = /(ab|a)b*c/; 1.714 +string = 'abc'; 1.715 +actualmatch = string.match(pattern); 1.716 +expectedmatch = Array('abc', 'ab'); 1.717 +addThis(); 1.718 + 1.719 +status = inSection(92); 1.720 +pattern = /((a)(b)c)(d)/; 1.721 +string = 'abcd'; 1.722 +actualmatch = string.match(pattern); 1.723 +expectedmatch = Array('abcd', 'abc', 'a', 'b', 'd'); 1.724 +addThis(); 1.725 + 1.726 +status = inSection(93); 1.727 +pattern = /[a-zA-Z_][a-zA-Z0-9_]*/; 1.728 +string = 'alpha'; 1.729 +actualmatch = string.match(pattern); 1.730 +expectedmatch = Array('alpha'); 1.731 +addThis(); 1.732 + 1.733 +status = inSection(94); 1.734 +pattern = /^a(bc+|b[eh])g|.h$/; 1.735 +string = 'abh'; 1.736 +actualmatch = string.match(pattern); 1.737 +expectedmatch = Array('bh', undefined); 1.738 +addThis(); 1.739 + 1.740 +status = inSection(95); 1.741 +pattern = /(bc+d$|ef*g.|h?i(j|k))/; 1.742 +string = 'effgz'; 1.743 +actualmatch = string.match(pattern); 1.744 +expectedmatch = Array('effgz', 'effgz', undefined); 1.745 +addThis(); 1.746 + 1.747 +status = inSection(96); 1.748 +pattern = /(bc+d$|ef*g.|h?i(j|k))/; 1.749 +string = 'ij'; 1.750 +actualmatch = string.match(pattern); 1.751 +expectedmatch = Array('ij', 'ij', 'j'); 1.752 +addThis(); 1.753 + 1.754 +status = inSection(97); 1.755 +pattern = /(bc+d$|ef*g.|h?i(j|k))/; 1.756 +string = 'reffgz'; 1.757 +actualmatch = string.match(pattern); 1.758 +expectedmatch = Array('effgz', 'effgz', undefined); 1.759 +addThis(); 1.760 + 1.761 +status = inSection(98); 1.762 +pattern = /((((((((((a))))))))))/; 1.763 +string = 'a'; 1.764 +actualmatch = string.match(pattern); 1.765 +expectedmatch = Array('a', 'a', 'a', 'a', 'a', 'a', 'a', 'a', 'a', 'a', 'a'); 1.766 +addThis(); 1.767 + 1.768 +status = inSection(99); 1.769 +pattern = /((((((((((a))))))))))\10/; 1.770 +string = 'aa'; 1.771 +actualmatch = string.match(pattern); 1.772 +expectedmatch = Array('aa', 'a', 'a', 'a', 'a', 'a', 'a', 'a', 'a', 'a', 'a'); 1.773 +addThis(); 1.774 + 1.775 +status = inSection(100); 1.776 +pattern = /((((((((((a))))))))))/; 1.777 +string = 'a!'; 1.778 +actualmatch = string.match(pattern); 1.779 +expectedmatch = Array('a', 'a', 'a', 'a', 'a', 'a', 'a', 'a', 'a', 'a', 'a'); 1.780 +addThis(); 1.781 + 1.782 +status = inSection(101); 1.783 +pattern = /(((((((((a)))))))))/; 1.784 +string = 'a'; 1.785 +actualmatch = string.match(pattern); 1.786 +expectedmatch = Array('a', 'a', 'a', 'a', 'a', 'a', 'a', 'a', 'a', 'a'); 1.787 +addThis(); 1.788 + 1.789 +status = inSection(102); 1.790 +pattern = /(.*)c(.*)/; 1.791 +string = 'abcde'; 1.792 +actualmatch = string.match(pattern); 1.793 +expectedmatch = Array('abcde', 'ab', 'de'); 1.794 +addThis(); 1.795 + 1.796 +status = inSection(103); 1.797 +pattern = /abcd/; 1.798 +string = 'abcd'; 1.799 +actualmatch = string.match(pattern); 1.800 +expectedmatch = Array('abcd'); 1.801 +addThis(); 1.802 + 1.803 +status = inSection(104); 1.804 +pattern = /a(bc)d/; 1.805 +string = 'abcd'; 1.806 +actualmatch = string.match(pattern); 1.807 +expectedmatch = Array('abcd', 'bc'); 1.808 +addThis(); 1.809 + 1.810 +status = inSection(105); 1.811 +pattern = /a[-]?c/; 1.812 +string = 'ac'; 1.813 +actualmatch = string.match(pattern); 1.814 +expectedmatch = Array('ac'); 1.815 +addThis(); 1.816 + 1.817 +status = inSection(106); 1.818 +pattern = /(abc)\1/; 1.819 +string = 'abcabc'; 1.820 +actualmatch = string.match(pattern); 1.821 +expectedmatch = Array('abcabc', 'abc'); 1.822 +addThis(); 1.823 + 1.824 +status = inSection(107); 1.825 +pattern = /([a-c]*)\1/; 1.826 +string = 'abcabc'; 1.827 +actualmatch = string.match(pattern); 1.828 +expectedmatch = Array('abcabc', 'abc'); 1.829 +addThis(); 1.830 + 1.831 +status = inSection(108); 1.832 +pattern = /(a)|\1/; 1.833 +string = 'a'; 1.834 +actualmatch = string.match(pattern); 1.835 +expectedmatch = Array('a', 'a'); 1.836 +addThis(); 1.837 + 1.838 +status = inSection(109); 1.839 +pattern = /(([a-c])b*?\2)*/; 1.840 +string = 'ababbbcbc'; 1.841 +actualmatch = string.match(pattern); 1.842 +expectedmatch = Array('ababb', 'bb', 'b'); 1.843 +addThis(); 1.844 + 1.845 +status = inSection(110); 1.846 +pattern = /(([a-c])b*?\2){3}/; 1.847 +string = 'ababbbcbc'; 1.848 +actualmatch = string.match(pattern); 1.849 +expectedmatch = Array('ababbbcbc', 'cbc', 'c'); 1.850 +addThis(); 1.851 + 1.852 +/* Can't refer to a capture before it's encountered & completed 1.853 + status = inSection(111); 1.854 + pattern = /((\3|b)\2(a)x)+/; 1.855 + string = 'aaaxabaxbaaxbbax'; 1.856 + actualmatch = string.match(pattern); 1.857 + expectedmatch = Array('bbax', 'bbax', 'b', 'a'); 1.858 + addThis(); 1.859 + 1.860 + status = inSection(112); 1.861 + pattern = /((\3|b)\2(a)){2,}/; 1.862 + string = 'bbaababbabaaaaabbaaaabba'; 1.863 + actualmatch = string.match(pattern); 1.864 + expectedmatch = Array('bbaaaabba', 'bba', 'b', 'a'); 1.865 + addThis(); 1.866 +*/ 1.867 + 1.868 +status = inSection(113); 1.869 +pattern = /abc/i; 1.870 +string = 'ABC'; 1.871 +actualmatch = string.match(pattern); 1.872 +expectedmatch = Array('ABC'); 1.873 +addThis(); 1.874 + 1.875 +status = inSection(114); 1.876 +pattern = /abc/i; 1.877 +string = 'XABCY'; 1.878 +actualmatch = string.match(pattern); 1.879 +expectedmatch = Array('ABC'); 1.880 +addThis(); 1.881 + 1.882 +status = inSection(115); 1.883 +pattern = /abc/i; 1.884 +string = 'ABABC'; 1.885 +actualmatch = string.match(pattern); 1.886 +expectedmatch = Array('ABC'); 1.887 +addThis(); 1.888 + 1.889 +status = inSection(116); 1.890 +pattern = /ab*c/i; 1.891 +string = 'ABC'; 1.892 +actualmatch = string.match(pattern); 1.893 +expectedmatch = Array('ABC'); 1.894 +addThis(); 1.895 + 1.896 +status = inSection(117); 1.897 +pattern = /ab*bc/i; 1.898 +string = 'ABC'; 1.899 +actualmatch = string.match(pattern); 1.900 +expectedmatch = Array('ABC'); 1.901 +addThis(); 1.902 + 1.903 +status = inSection(118); 1.904 +pattern = /ab*bc/i; 1.905 +string = 'ABBC'; 1.906 +actualmatch = string.match(pattern); 1.907 +expectedmatch = Array('ABBC'); 1.908 +addThis(); 1.909 + 1.910 +status = inSection(119); 1.911 +pattern = /ab*?bc/i; 1.912 +string = 'ABBBBC'; 1.913 +actualmatch = string.match(pattern); 1.914 +expectedmatch = Array('ABBBBC'); 1.915 +addThis(); 1.916 + 1.917 +status = inSection(120); 1.918 +pattern = /ab{0,}?bc/i; 1.919 +string = 'ABBBBC'; 1.920 +actualmatch = string.match(pattern); 1.921 +expectedmatch = Array('ABBBBC'); 1.922 +addThis(); 1.923 + 1.924 +status = inSection(121); 1.925 +pattern = /ab+?bc/i; 1.926 +string = 'ABBC'; 1.927 +actualmatch = string.match(pattern); 1.928 +expectedmatch = Array('ABBC'); 1.929 +addThis(); 1.930 + 1.931 +status = inSection(122); 1.932 +pattern = /ab+bc/i; 1.933 +string = 'ABBBBC'; 1.934 +actualmatch = string.match(pattern); 1.935 +expectedmatch = Array('ABBBBC'); 1.936 +addThis(); 1.937 + 1.938 +status = inSection(123); 1.939 +pattern = /ab{1,}?bc/i; 1.940 +string = 'ABBBBC'; 1.941 +actualmatch = string.match(pattern); 1.942 +expectedmatch = Array('ABBBBC'); 1.943 +addThis(); 1.944 + 1.945 +status = inSection(124); 1.946 +pattern = /ab{1,3}?bc/i; 1.947 +string = 'ABBBBC'; 1.948 +actualmatch = string.match(pattern); 1.949 +expectedmatch = Array('ABBBBC'); 1.950 +addThis(); 1.951 + 1.952 +status = inSection(125); 1.953 +pattern = /ab{3,4}?bc/i; 1.954 +string = 'ABBBBC'; 1.955 +actualmatch = string.match(pattern); 1.956 +expectedmatch = Array('ABBBBC'); 1.957 +addThis(); 1.958 + 1.959 +status = inSection(126); 1.960 +pattern = /ab??bc/i; 1.961 +string = 'ABBC'; 1.962 +actualmatch = string.match(pattern); 1.963 +expectedmatch = Array('ABBC'); 1.964 +addThis(); 1.965 + 1.966 +status = inSection(127); 1.967 +pattern = /ab??bc/i; 1.968 +string = 'ABC'; 1.969 +actualmatch = string.match(pattern); 1.970 +expectedmatch = Array('ABC'); 1.971 +addThis(); 1.972 + 1.973 +status = inSection(128); 1.974 +pattern = /ab{0,1}?bc/i; 1.975 +string = 'ABC'; 1.976 +actualmatch = string.match(pattern); 1.977 +expectedmatch = Array('ABC'); 1.978 +addThis(); 1.979 + 1.980 +status = inSection(129); 1.981 +pattern = /ab??c/i; 1.982 +string = 'ABC'; 1.983 +actualmatch = string.match(pattern); 1.984 +expectedmatch = Array('ABC'); 1.985 +addThis(); 1.986 + 1.987 +status = inSection(130); 1.988 +pattern = /ab{0,1}?c/i; 1.989 +string = 'ABC'; 1.990 +actualmatch = string.match(pattern); 1.991 +expectedmatch = Array('ABC'); 1.992 +addThis(); 1.993 + 1.994 +status = inSection(131); 1.995 +pattern = /^abc$/i; 1.996 +string = 'ABC'; 1.997 +actualmatch = string.match(pattern); 1.998 +expectedmatch = Array('ABC'); 1.999 +addThis(); 1.1000 + 1.1001 +status = inSection(132); 1.1002 +pattern = /^abc/i; 1.1003 +string = 'ABCC'; 1.1004 +actualmatch = string.match(pattern); 1.1005 +expectedmatch = Array('ABC'); 1.1006 +addThis(); 1.1007 + 1.1008 +status = inSection(133); 1.1009 +pattern = /abc$/i; 1.1010 +string = 'AABC'; 1.1011 +actualmatch = string.match(pattern); 1.1012 +expectedmatch = Array('ABC'); 1.1013 +addThis(); 1.1014 + 1.1015 +status = inSection(134); 1.1016 +pattern = /^/i; 1.1017 +string = 'ABC'; 1.1018 +actualmatch = string.match(pattern); 1.1019 +expectedmatch = Array(''); 1.1020 +addThis(); 1.1021 + 1.1022 +status = inSection(135); 1.1023 +pattern = /$/i; 1.1024 +string = 'ABC'; 1.1025 +actualmatch = string.match(pattern); 1.1026 +expectedmatch = Array(''); 1.1027 +addThis(); 1.1028 + 1.1029 +status = inSection(136); 1.1030 +pattern = /a.c/i; 1.1031 +string = 'ABC'; 1.1032 +actualmatch = string.match(pattern); 1.1033 +expectedmatch = Array('ABC'); 1.1034 +addThis(); 1.1035 + 1.1036 +status = inSection(137); 1.1037 +pattern = /a.c/i; 1.1038 +string = 'AXC'; 1.1039 +actualmatch = string.match(pattern); 1.1040 +expectedmatch = Array('AXC'); 1.1041 +addThis(); 1.1042 + 1.1043 +status = inSection(138); 1.1044 +pattern = /a.*?c/i; 1.1045 +string = 'AXYZC'; 1.1046 +actualmatch = string.match(pattern); 1.1047 +expectedmatch = Array('AXYZC'); 1.1048 +addThis(); 1.1049 + 1.1050 +status = inSection(139); 1.1051 +pattern = /a[bc]d/i; 1.1052 +string = 'ABD'; 1.1053 +actualmatch = string.match(pattern); 1.1054 +expectedmatch = Array('ABD'); 1.1055 +addThis(); 1.1056 + 1.1057 +status = inSection(140); 1.1058 +pattern = /a[b-d]e/i; 1.1059 +string = 'ACE'; 1.1060 +actualmatch = string.match(pattern); 1.1061 +expectedmatch = Array('ACE'); 1.1062 +addThis(); 1.1063 + 1.1064 +status = inSection(141); 1.1065 +pattern = /a[b-d]/i; 1.1066 +string = 'AAC'; 1.1067 +actualmatch = string.match(pattern); 1.1068 +expectedmatch = Array('AC'); 1.1069 +addThis(); 1.1070 + 1.1071 +status = inSection(142); 1.1072 +pattern = /a[-b]/i; 1.1073 +string = 'A-'; 1.1074 +actualmatch = string.match(pattern); 1.1075 +expectedmatch = Array('A-'); 1.1076 +addThis(); 1.1077 + 1.1078 +status = inSection(143); 1.1079 +pattern = /a[b-]/i; 1.1080 +string = 'A-'; 1.1081 +actualmatch = string.match(pattern); 1.1082 +expectedmatch = Array('A-'); 1.1083 +addThis(); 1.1084 + 1.1085 +status = inSection(144); 1.1086 +pattern = /a]/i; 1.1087 +string = 'A]'; 1.1088 +actualmatch = string.match(pattern); 1.1089 +expectedmatch = Array('A]'); 1.1090 +addThis(); 1.1091 + 1.1092 +/* Perl supports ] & ^] inside a [], ECMA does not 1.1093 + status = inSection(145); 1.1094 + pattern = /a[]]b/i; 1.1095 + string = 'A]B'; 1.1096 + actualmatch = string.match(pattern); 1.1097 + expectedmatch = Array('A]B'); 1.1098 + addThis(); 1.1099 +*/ 1.1100 + 1.1101 +status = inSection(146); 1.1102 +pattern = /a[^bc]d/i; 1.1103 +string = 'AED'; 1.1104 +actualmatch = string.match(pattern); 1.1105 +expectedmatch = Array('AED'); 1.1106 +addThis(); 1.1107 + 1.1108 +status = inSection(147); 1.1109 +pattern = /a[^-b]c/i; 1.1110 +string = 'ADC'; 1.1111 +actualmatch = string.match(pattern); 1.1112 +expectedmatch = Array('ADC'); 1.1113 +addThis(); 1.1114 + 1.1115 +/* Perl supports ] & ^] inside a [], ECMA does not 1.1116 + status = inSection(148); 1.1117 + pattern = /a[^]b]c/i; 1.1118 + string = 'ADC'; 1.1119 + actualmatch = string.match(pattern); 1.1120 + expectedmatch = Array('ADC'); 1.1121 + addThis(); 1.1122 +*/ 1.1123 + 1.1124 +status = inSection(149); 1.1125 +pattern = /ab|cd/i; 1.1126 +string = 'ABC'; 1.1127 +actualmatch = string.match(pattern); 1.1128 +expectedmatch = Array('AB'); 1.1129 +addThis(); 1.1130 + 1.1131 +status = inSection(150); 1.1132 +pattern = /ab|cd/i; 1.1133 +string = 'ABCD'; 1.1134 +actualmatch = string.match(pattern); 1.1135 +expectedmatch = Array('AB'); 1.1136 +addThis(); 1.1137 + 1.1138 +status = inSection(151); 1.1139 +pattern = /()ef/i; 1.1140 +string = 'DEF'; 1.1141 +actualmatch = string.match(pattern); 1.1142 +expectedmatch = Array('EF', ''); 1.1143 +addThis(); 1.1144 + 1.1145 +status = inSection(152); 1.1146 +pattern = /a\(b/i; 1.1147 +string = 'A(B'; 1.1148 +actualmatch = string.match(pattern); 1.1149 +expectedmatch = Array('A(B'); 1.1150 +addThis(); 1.1151 + 1.1152 +status = inSection(153); 1.1153 +pattern = /a\(*b/i; 1.1154 +string = 'AB'; 1.1155 +actualmatch = string.match(pattern); 1.1156 +expectedmatch = Array('AB'); 1.1157 +addThis(); 1.1158 + 1.1159 +status = inSection(154); 1.1160 +pattern = /a\(*b/i; 1.1161 +string = 'A((B'; 1.1162 +actualmatch = string.match(pattern); 1.1163 +expectedmatch = Array('A((B'); 1.1164 +addThis(); 1.1165 + 1.1166 +status = inSection(155); 1.1167 +pattern = /a\\b/i; 1.1168 +string = 'A\\B'; 1.1169 +actualmatch = string.match(pattern); 1.1170 +expectedmatch = Array('A\\B'); 1.1171 +addThis(); 1.1172 + 1.1173 +status = inSection(156); 1.1174 +pattern = /((a))/i; 1.1175 +string = 'ABC'; 1.1176 +actualmatch = string.match(pattern); 1.1177 +expectedmatch = Array('A', 'A', 'A'); 1.1178 +addThis(); 1.1179 + 1.1180 +status = inSection(157); 1.1181 +pattern = /(a)b(c)/i; 1.1182 +string = 'ABC'; 1.1183 +actualmatch = string.match(pattern); 1.1184 +expectedmatch = Array('ABC', 'A', 'C'); 1.1185 +addThis(); 1.1186 + 1.1187 +status = inSection(158); 1.1188 +pattern = /a+b+c/i; 1.1189 +string = 'AABBABC'; 1.1190 +actualmatch = string.match(pattern); 1.1191 +expectedmatch = Array('ABC'); 1.1192 +addThis(); 1.1193 + 1.1194 +status = inSection(159); 1.1195 +pattern = /a{1,}b{1,}c/i; 1.1196 +string = 'AABBABC'; 1.1197 +actualmatch = string.match(pattern); 1.1198 +expectedmatch = Array('ABC'); 1.1199 +addThis(); 1.1200 + 1.1201 +status = inSection(160); 1.1202 +pattern = /a.+?c/i; 1.1203 +string = 'ABCABC'; 1.1204 +actualmatch = string.match(pattern); 1.1205 +expectedmatch = Array('ABC'); 1.1206 +addThis(); 1.1207 + 1.1208 +status = inSection(161); 1.1209 +pattern = /a.*?c/i; 1.1210 +string = 'ABCABC'; 1.1211 +actualmatch = string.match(pattern); 1.1212 +expectedmatch = Array('ABC'); 1.1213 +addThis(); 1.1214 + 1.1215 +status = inSection(162); 1.1216 +pattern = /a.{0,5}?c/i; 1.1217 +string = 'ABCABC'; 1.1218 +actualmatch = string.match(pattern); 1.1219 +expectedmatch = Array('ABC'); 1.1220 +addThis(); 1.1221 + 1.1222 +status = inSection(163); 1.1223 +pattern = /(a+|b)*/i; 1.1224 +string = 'AB'; 1.1225 +actualmatch = string.match(pattern); 1.1226 +expectedmatch = Array('AB', 'B'); 1.1227 +addThis(); 1.1228 + 1.1229 +status = inSection(164); 1.1230 +pattern = /(a+|b){0,}/i; 1.1231 +string = 'AB'; 1.1232 +actualmatch = string.match(pattern); 1.1233 +expectedmatch = Array('AB', 'B'); 1.1234 +addThis(); 1.1235 + 1.1236 +status = inSection(165); 1.1237 +pattern = /(a+|b)+/i; 1.1238 +string = 'AB'; 1.1239 +actualmatch = string.match(pattern); 1.1240 +expectedmatch = Array('AB', 'B'); 1.1241 +addThis(); 1.1242 + 1.1243 +status = inSection(166); 1.1244 +pattern = /(a+|b){1,}/i; 1.1245 +string = 'AB'; 1.1246 +actualmatch = string.match(pattern); 1.1247 +expectedmatch = Array('AB', 'B'); 1.1248 +addThis(); 1.1249 + 1.1250 +status = inSection(167); 1.1251 +pattern = /(a+|b)?/i; 1.1252 +string = 'AB'; 1.1253 +actualmatch = string.match(pattern); 1.1254 +expectedmatch = Array('A', 'A'); 1.1255 +addThis(); 1.1256 + 1.1257 +status = inSection(168); 1.1258 +pattern = /(a+|b){0,1}/i; 1.1259 +string = 'AB'; 1.1260 +actualmatch = string.match(pattern); 1.1261 +expectedmatch = Array('A', 'A'); 1.1262 +addThis(); 1.1263 + 1.1264 +status = inSection(169); 1.1265 +pattern = /(a+|b){0,1}?/i; 1.1266 +string = 'AB'; 1.1267 +actualmatch = string.match(pattern); 1.1268 +expectedmatch = Array('', undefined); 1.1269 +addThis(); 1.1270 + 1.1271 +status = inSection(170); 1.1272 +pattern = /[^ab]*/i; 1.1273 +string = 'CDE'; 1.1274 +actualmatch = string.match(pattern); 1.1275 +expectedmatch = Array('CDE'); 1.1276 +addThis(); 1.1277 + 1.1278 +status = inSection(171); 1.1279 +pattern = /([abc])*d/i; 1.1280 +string = 'ABBBCD'; 1.1281 +actualmatch = string.match(pattern); 1.1282 +expectedmatch = Array('ABBBCD', 'C'); 1.1283 +addThis(); 1.1284 + 1.1285 +status = inSection(172); 1.1286 +pattern = /([abc])*bcd/i; 1.1287 +string = 'ABCD'; 1.1288 +actualmatch = string.match(pattern); 1.1289 +expectedmatch = Array('ABCD', 'A'); 1.1290 +addThis(); 1.1291 + 1.1292 +status = inSection(173); 1.1293 +pattern = /a|b|c|d|e/i; 1.1294 +string = 'E'; 1.1295 +actualmatch = string.match(pattern); 1.1296 +expectedmatch = Array('E'); 1.1297 +addThis(); 1.1298 + 1.1299 +status = inSection(174); 1.1300 +pattern = /(a|b|c|d|e)f/i; 1.1301 +string = 'EF'; 1.1302 +actualmatch = string.match(pattern); 1.1303 +expectedmatch = Array('EF', 'E'); 1.1304 +addThis(); 1.1305 + 1.1306 +status = inSection(175); 1.1307 +pattern = /abcd*efg/i; 1.1308 +string = 'ABCDEFG'; 1.1309 +actualmatch = string.match(pattern); 1.1310 +expectedmatch = Array('ABCDEFG'); 1.1311 +addThis(); 1.1312 + 1.1313 +status = inSection(176); 1.1314 +pattern = /ab*/i; 1.1315 +string = 'XABYABBBZ'; 1.1316 +actualmatch = string.match(pattern); 1.1317 +expectedmatch = Array('AB'); 1.1318 +addThis(); 1.1319 + 1.1320 +status = inSection(177); 1.1321 +pattern = /ab*/i; 1.1322 +string = 'XAYABBBZ'; 1.1323 +actualmatch = string.match(pattern); 1.1324 +expectedmatch = Array('A'); 1.1325 +addThis(); 1.1326 + 1.1327 +status = inSection(178); 1.1328 +pattern = /(ab|cd)e/i; 1.1329 +string = 'ABCDE'; 1.1330 +actualmatch = string.match(pattern); 1.1331 +expectedmatch = Array('CDE', 'CD'); 1.1332 +addThis(); 1.1333 + 1.1334 +status = inSection(179); 1.1335 +pattern = /[abhgefdc]ij/i; 1.1336 +string = 'HIJ'; 1.1337 +actualmatch = string.match(pattern); 1.1338 +expectedmatch = Array('HIJ'); 1.1339 +addThis(); 1.1340 + 1.1341 +status = inSection(180); 1.1342 +pattern = /(abc|)ef/i; 1.1343 +string = 'ABCDEF'; 1.1344 +actualmatch = string.match(pattern); 1.1345 +expectedmatch = Array('EF', ''); 1.1346 +addThis(); 1.1347 + 1.1348 +status = inSection(181); 1.1349 +pattern = /(a|b)c*d/i; 1.1350 +string = 'ABCD'; 1.1351 +actualmatch = string.match(pattern); 1.1352 +expectedmatch = Array('BCD', 'B'); 1.1353 +addThis(); 1.1354 + 1.1355 +status = inSection(182); 1.1356 +pattern = /(ab|ab*)bc/i; 1.1357 +string = 'ABC'; 1.1358 +actualmatch = string.match(pattern); 1.1359 +expectedmatch = Array('ABC', 'A'); 1.1360 +addThis(); 1.1361 + 1.1362 +status = inSection(183); 1.1363 +pattern = /a([bc]*)c*/i; 1.1364 +string = 'ABC'; 1.1365 +actualmatch = string.match(pattern); 1.1366 +expectedmatch = Array('ABC', 'BC'); 1.1367 +addThis(); 1.1368 + 1.1369 +status = inSection(184); 1.1370 +pattern = /a([bc]*)(c*d)/i; 1.1371 +string = 'ABCD'; 1.1372 +actualmatch = string.match(pattern); 1.1373 +expectedmatch = Array('ABCD', 'BC', 'D'); 1.1374 +addThis(); 1.1375 + 1.1376 +status = inSection(185); 1.1377 +pattern = /a([bc]+)(c*d)/i; 1.1378 +string = 'ABCD'; 1.1379 +actualmatch = string.match(pattern); 1.1380 +expectedmatch = Array('ABCD', 'BC', 'D'); 1.1381 +addThis(); 1.1382 + 1.1383 +status = inSection(186); 1.1384 +pattern = /a([bc]*)(c+d)/i; 1.1385 +string = 'ABCD'; 1.1386 +actualmatch = string.match(pattern); 1.1387 +expectedmatch = Array('ABCD', 'B', 'CD'); 1.1388 +addThis(); 1.1389 + 1.1390 +status = inSection(187); 1.1391 +pattern = /a[bcd]*dcdcde/i; 1.1392 +string = 'ADCDCDE'; 1.1393 +actualmatch = string.match(pattern); 1.1394 +expectedmatch = Array('ADCDCDE'); 1.1395 +addThis(); 1.1396 + 1.1397 +status = inSection(188); 1.1398 +pattern = /(ab|a)b*c/i; 1.1399 +string = 'ABC'; 1.1400 +actualmatch = string.match(pattern); 1.1401 +expectedmatch = Array('ABC', 'AB'); 1.1402 +addThis(); 1.1403 + 1.1404 +status = inSection(189); 1.1405 +pattern = /((a)(b)c)(d)/i; 1.1406 +string = 'ABCD'; 1.1407 +actualmatch = string.match(pattern); 1.1408 +expectedmatch = Array('ABCD', 'ABC', 'A', 'B', 'D'); 1.1409 +addThis(); 1.1410 + 1.1411 +status = inSection(190); 1.1412 +pattern = /[a-zA-Z_][a-zA-Z0-9_]*/i; 1.1413 +string = 'ALPHA'; 1.1414 +actualmatch = string.match(pattern); 1.1415 +expectedmatch = Array('ALPHA'); 1.1416 +addThis(); 1.1417 + 1.1418 +status = inSection(191); 1.1419 +pattern = /^a(bc+|b[eh])g|.h$/i; 1.1420 +string = 'ABH'; 1.1421 +actualmatch = string.match(pattern); 1.1422 +expectedmatch = Array('BH', undefined); 1.1423 +addThis(); 1.1424 + 1.1425 +status = inSection(192); 1.1426 +pattern = /(bc+d$|ef*g.|h?i(j|k))/i; 1.1427 +string = 'EFFGZ'; 1.1428 +actualmatch = string.match(pattern); 1.1429 +expectedmatch = Array('EFFGZ', 'EFFGZ', undefined); 1.1430 +addThis(); 1.1431 + 1.1432 +status = inSection(193); 1.1433 +pattern = /(bc+d$|ef*g.|h?i(j|k))/i; 1.1434 +string = 'IJ'; 1.1435 +actualmatch = string.match(pattern); 1.1436 +expectedmatch = Array('IJ', 'IJ', 'J'); 1.1437 +addThis(); 1.1438 + 1.1439 +status = inSection(194); 1.1440 +pattern = /(bc+d$|ef*g.|h?i(j|k))/i; 1.1441 +string = 'REFFGZ'; 1.1442 +actualmatch = string.match(pattern); 1.1443 +expectedmatch = Array('EFFGZ', 'EFFGZ', undefined); 1.1444 +addThis(); 1.1445 + 1.1446 +status = inSection(195); 1.1447 +pattern = /((((((((((a))))))))))/i; 1.1448 +string = 'A'; 1.1449 +actualmatch = string.match(pattern); 1.1450 +expectedmatch = Array('A', 'A', 'A', 'A', 'A', 'A', 'A', 'A', 'A', 'A', 'A'); 1.1451 +addThis(); 1.1452 + 1.1453 +status = inSection(196); 1.1454 +pattern = /((((((((((a))))))))))\10/i; 1.1455 +string = 'AA'; 1.1456 +actualmatch = string.match(pattern); 1.1457 +expectedmatch = Array('AA', 'A', 'A', 'A', 'A', 'A', 'A', 'A', 'A', 'A', 'A'); 1.1458 +addThis(); 1.1459 + 1.1460 +status = inSection(197); 1.1461 +pattern = /((((((((((a))))))))))/i; 1.1462 +string = 'A!'; 1.1463 +actualmatch = string.match(pattern); 1.1464 +expectedmatch = Array('A', 'A', 'A', 'A', 'A', 'A', 'A', 'A', 'A', 'A', 'A'); 1.1465 +addThis(); 1.1466 + 1.1467 +status = inSection(198); 1.1468 +pattern = /(((((((((a)))))))))/i; 1.1469 +string = 'A'; 1.1470 +actualmatch = string.match(pattern); 1.1471 +expectedmatch = Array('A', 'A', 'A', 'A', 'A', 'A', 'A', 'A', 'A', 'A'); 1.1472 +addThis(); 1.1473 + 1.1474 +status = inSection(199); 1.1475 +pattern = /(?:(?:(?:(?:(?:(?:(?:(?:(?:(a))))))))))/i; 1.1476 +string = 'A'; 1.1477 +actualmatch = string.match(pattern); 1.1478 +expectedmatch = Array('A', 'A'); 1.1479 +addThis(); 1.1480 + 1.1481 +status = inSection(200); 1.1482 +pattern = /(?:(?:(?:(?:(?:(?:(?:(?:(?:(a|b|c))))))))))/i; 1.1483 +string = 'C'; 1.1484 +actualmatch = string.match(pattern); 1.1485 +expectedmatch = Array('C', 'C'); 1.1486 +addThis(); 1.1487 + 1.1488 +status = inSection(201); 1.1489 +pattern = /(.*)c(.*)/i; 1.1490 +string = 'ABCDE'; 1.1491 +actualmatch = string.match(pattern); 1.1492 +expectedmatch = Array('ABCDE', 'AB', 'DE'); 1.1493 +addThis(); 1.1494 + 1.1495 +status = inSection(202); 1.1496 +pattern = /abcd/i; 1.1497 +string = 'ABCD'; 1.1498 +actualmatch = string.match(pattern); 1.1499 +expectedmatch = Array('ABCD'); 1.1500 +addThis(); 1.1501 + 1.1502 +status = inSection(203); 1.1503 +pattern = /a(bc)d/i; 1.1504 +string = 'ABCD'; 1.1505 +actualmatch = string.match(pattern); 1.1506 +expectedmatch = Array('ABCD', 'BC'); 1.1507 +addThis(); 1.1508 + 1.1509 +status = inSection(204); 1.1510 +pattern = /a[-]?c/i; 1.1511 +string = 'AC'; 1.1512 +actualmatch = string.match(pattern); 1.1513 +expectedmatch = Array('AC'); 1.1514 +addThis(); 1.1515 + 1.1516 +status = inSection(205); 1.1517 +pattern = /(abc)\1/i; 1.1518 +string = 'ABCABC'; 1.1519 +actualmatch = string.match(pattern); 1.1520 +expectedmatch = Array('ABCABC', 'ABC'); 1.1521 +addThis(); 1.1522 + 1.1523 +status = inSection(206); 1.1524 +pattern = /([a-c]*)\1/i; 1.1525 +string = 'ABCABC'; 1.1526 +actualmatch = string.match(pattern); 1.1527 +expectedmatch = Array('ABCABC', 'ABC'); 1.1528 +addThis(); 1.1529 + 1.1530 +status = inSection(207); 1.1531 +pattern = /a(?!b)./; 1.1532 +string = 'abad'; 1.1533 +actualmatch = string.match(pattern); 1.1534 +expectedmatch = Array('ad'); 1.1535 +addThis(); 1.1536 + 1.1537 +status = inSection(208); 1.1538 +pattern = /a(?=d)./; 1.1539 +string = 'abad'; 1.1540 +actualmatch = string.match(pattern); 1.1541 +expectedmatch = Array('ad'); 1.1542 +addThis(); 1.1543 + 1.1544 +status = inSection(209); 1.1545 +pattern = /a(?=c|d)./; 1.1546 +string = 'abad'; 1.1547 +actualmatch = string.match(pattern); 1.1548 +expectedmatch = Array('ad'); 1.1549 +addThis(); 1.1550 + 1.1551 +status = inSection(210); 1.1552 +pattern = /a(?:b|c|d)(.)/; 1.1553 +string = 'ace'; 1.1554 +actualmatch = string.match(pattern); 1.1555 +expectedmatch = Array('ace', 'e'); 1.1556 +addThis(); 1.1557 + 1.1558 +status = inSection(211); 1.1559 +pattern = /a(?:b|c|d)*(.)/; 1.1560 +string = 'ace'; 1.1561 +actualmatch = string.match(pattern); 1.1562 +expectedmatch = Array('ace', 'e'); 1.1563 +addThis(); 1.1564 + 1.1565 +status = inSection(212); 1.1566 +pattern = /a(?:b|c|d)+?(.)/; 1.1567 +string = 'ace'; 1.1568 +actualmatch = string.match(pattern); 1.1569 +expectedmatch = Array('ace', 'e'); 1.1570 +addThis(); 1.1571 + 1.1572 +status = inSection(213); 1.1573 +pattern = /a(?:b|c|d)+?(.)/; 1.1574 +string = 'acdbcdbe'; 1.1575 +actualmatch = string.match(pattern); 1.1576 +expectedmatch = Array('acd', 'd'); 1.1577 +addThis(); 1.1578 + 1.1579 +status = inSection(214); 1.1580 +pattern = /a(?:b|c|d)+(.)/; 1.1581 +string = 'acdbcdbe'; 1.1582 +actualmatch = string.match(pattern); 1.1583 +expectedmatch = Array('acdbcdbe', 'e'); 1.1584 +addThis(); 1.1585 + 1.1586 +status = inSection(215); 1.1587 +pattern = /a(?:b|c|d){2}(.)/; 1.1588 +string = 'acdbcdbe'; 1.1589 +actualmatch = string.match(pattern); 1.1590 +expectedmatch = Array('acdb', 'b'); 1.1591 +addThis(); 1.1592 + 1.1593 +status = inSection(216); 1.1594 +pattern = /a(?:b|c|d){4,5}(.)/; 1.1595 +string = 'acdbcdbe'; 1.1596 +actualmatch = string.match(pattern); 1.1597 +expectedmatch = Array('acdbcdb', 'b'); 1.1598 +addThis(); 1.1599 + 1.1600 +status = inSection(217); 1.1601 +pattern = /a(?:b|c|d){4,5}?(.)/; 1.1602 +string = 'acdbcdbe'; 1.1603 +actualmatch = string.match(pattern); 1.1604 +expectedmatch = Array('acdbcd', 'd'); 1.1605 +addThis(); 1.1606 + 1.1607 +// MODIFIED - ECMA has different rules for paren contents 1.1608 +status = inSection(218); 1.1609 +pattern = /((foo)|(bar))*/; 1.1610 +string = 'foobar'; 1.1611 +actualmatch = string.match(pattern); 1.1612 +//expectedmatch = Array('foobar', 'bar', 'foo', 'bar'); 1.1613 +expectedmatch = Array('foobar', 'bar', undefined, 'bar'); 1.1614 +addThis(); 1.1615 + 1.1616 +status = inSection(219); 1.1617 +pattern = /a(?:b|c|d){6,7}(.)/; 1.1618 +string = 'acdbcdbe'; 1.1619 +actualmatch = string.match(pattern); 1.1620 +expectedmatch = Array('acdbcdbe', 'e'); 1.1621 +addThis(); 1.1622 + 1.1623 +status = inSection(220); 1.1624 +pattern = /a(?:b|c|d){6,7}?(.)/; 1.1625 +string = 'acdbcdbe'; 1.1626 +actualmatch = string.match(pattern); 1.1627 +expectedmatch = Array('acdbcdbe', 'e'); 1.1628 +addThis(); 1.1629 + 1.1630 +status = inSection(221); 1.1631 +pattern = /a(?:b|c|d){5,6}(.)/; 1.1632 +string = 'acdbcdbe'; 1.1633 +actualmatch = string.match(pattern); 1.1634 +expectedmatch = Array('acdbcdbe', 'e'); 1.1635 +addThis(); 1.1636 + 1.1637 +status = inSection(222); 1.1638 +pattern = /a(?:b|c|d){5,6}?(.)/; 1.1639 +string = 'acdbcdbe'; 1.1640 +actualmatch = string.match(pattern); 1.1641 +expectedmatch = Array('acdbcdb', 'b'); 1.1642 +addThis(); 1.1643 + 1.1644 +status = inSection(223); 1.1645 +pattern = /a(?:b|c|d){5,7}(.)/; 1.1646 +string = 'acdbcdbe'; 1.1647 +actualmatch = string.match(pattern); 1.1648 +expectedmatch = Array('acdbcdbe', 'e'); 1.1649 +addThis(); 1.1650 + 1.1651 +status = inSection(224); 1.1652 +pattern = /a(?:b|c|d){5,7}?(.)/; 1.1653 +string = 'acdbcdbe'; 1.1654 +actualmatch = string.match(pattern); 1.1655 +expectedmatch = Array('acdbcdb', 'b'); 1.1656 +addThis(); 1.1657 + 1.1658 +status = inSection(225); 1.1659 +pattern = /a(?:b|(c|e){1,2}?|d)+?(.)/; 1.1660 +string = 'ace'; 1.1661 +actualmatch = string.match(pattern); 1.1662 +expectedmatch = Array('ace', 'c', 'e'); 1.1663 +addThis(); 1.1664 + 1.1665 +status = inSection(226); 1.1666 +pattern = /^(.+)?B/; 1.1667 +string = 'AB'; 1.1668 +actualmatch = string.match(pattern); 1.1669 +expectedmatch = Array('AB', 'A'); 1.1670 +addThis(); 1.1671 + 1.1672 +/* MODIFIED - ECMA has different rules for paren contents */ 1.1673 +status = inSection(227); 1.1674 +pattern = /^([^a-z])|(\^)$/; 1.1675 +string = '.'; 1.1676 +actualmatch = string.match(pattern); 1.1677 +//expectedmatch = Array('.', '.', ''); 1.1678 +expectedmatch = Array('.', '.', undefined); 1.1679 +addThis(); 1.1680 + 1.1681 +status = inSection(228); 1.1682 +pattern = /^[<>]&/; 1.1683 +string = '<&OUT'; 1.1684 +actualmatch = string.match(pattern); 1.1685 +expectedmatch = Array('<&'); 1.1686 +addThis(); 1.1687 + 1.1688 +/* Can't refer to a capture before it's encountered & completed 1.1689 + status = inSection(229); 1.1690 + pattern = /^(a\1?){4}$/; 1.1691 + string = 'aaaaaaaaaa'; 1.1692 + actualmatch = string.match(pattern); 1.1693 + expectedmatch = Array('aaaaaaaaaa', 'aaaa'); 1.1694 + addThis(); 1.1695 + 1.1696 + status = inSection(230); 1.1697 + pattern = /^(a(?(1)\1)){4}$/; 1.1698 + string = 'aaaaaaaaaa'; 1.1699 + actualmatch = string.match(pattern); 1.1700 + expectedmatch = Array('aaaaaaaaaa', 'aaaa'); 1.1701 + addThis(); 1.1702 +*/ 1.1703 + 1.1704 +status = inSection(231); 1.1705 +pattern = /((a{4})+)/; 1.1706 +string = 'aaaaaaaaa'; 1.1707 +actualmatch = string.match(pattern); 1.1708 +expectedmatch = Array('aaaaaaaa', 'aaaaaaaa', 'aaaa'); 1.1709 +addThis(); 1.1710 + 1.1711 +status = inSection(232); 1.1712 +pattern = /(((aa){2})+)/; 1.1713 +string = 'aaaaaaaaaa'; 1.1714 +actualmatch = string.match(pattern); 1.1715 +expectedmatch = Array('aaaaaaaa', 'aaaaaaaa', 'aaaa', 'aa'); 1.1716 +addThis(); 1.1717 + 1.1718 +status = inSection(233); 1.1719 +pattern = /(((a{2}){2})+)/; 1.1720 +string = 'aaaaaaaaaa'; 1.1721 +actualmatch = string.match(pattern); 1.1722 +expectedmatch = Array('aaaaaaaa', 'aaaaaaaa', 'aaaa', 'aa'); 1.1723 +addThis(); 1.1724 + 1.1725 +status = inSection(234); 1.1726 +pattern = /(?:(f)(o)(o)|(b)(a)(r))*/; 1.1727 +string = 'foobar'; 1.1728 +actualmatch = string.match(pattern); 1.1729 +//expectedmatch = Array('foobar', 'f', 'o', 'o', 'b', 'a', 'r'); 1.1730 +expectedmatch = Array('foobar', undefined, undefined, undefined, 'b', 'a', 'r'); 1.1731 +addThis(); 1.1732 + 1.1733 +/* ECMA supports (?: (?= and (?! but doesn't support (?< etc. 1.1734 + status = inSection(235); 1.1735 + pattern = /(?<=a)b/; 1.1736 + string = 'ab'; 1.1737 + actualmatch = string.match(pattern); 1.1738 + expectedmatch = Array('b'); 1.1739 + addThis(); 1.1740 + 1.1741 + status = inSection(236); 1.1742 + pattern = /(?<!c)b/; 1.1743 + string = 'ab'; 1.1744 + actualmatch = string.match(pattern); 1.1745 + expectedmatch = Array('b'); 1.1746 + addThis(); 1.1747 + 1.1748 + status = inSection(237); 1.1749 + pattern = /(?<!c)b/; 1.1750 + string = 'b'; 1.1751 + actualmatch = string.match(pattern); 1.1752 + expectedmatch = Array('b'); 1.1753 + addThis(); 1.1754 + 1.1755 + status = inSection(238); 1.1756 + pattern = /(?<!c)b/; 1.1757 + string = 'b'; 1.1758 + actualmatch = string.match(pattern); 1.1759 + expectedmatch = Array('b'); 1.1760 + addThis(); 1.1761 +*/ 1.1762 + 1.1763 +status = inSection(239); 1.1764 +pattern = /(?:..)*a/; 1.1765 +string = 'aba'; 1.1766 +actualmatch = string.match(pattern); 1.1767 +expectedmatch = Array('aba'); 1.1768 +addThis(); 1.1769 + 1.1770 +status = inSection(240); 1.1771 +pattern = /(?:..)*?a/; 1.1772 +string = 'aba'; 1.1773 +actualmatch = string.match(pattern); 1.1774 +expectedmatch = Array('a'); 1.1775 +addThis(); 1.1776 + 1.1777 +/* 1.1778 + * MODIFIED - ECMA has different rules for paren contents. Note 1.1779 + * this regexp has two non-capturing parens, and one capturing 1.1780 + * 1.1781 + * The issue: shouldn't the match be ['ab', undefined]? Because the 1.1782 + * '\1' matches the undefined value of the second iteration of the '*' 1.1783 + * (in which the 'b' part of the '|' matches). But Perl wants ['ab','b']. 1.1784 + * 1.1785 + * Answer: waldemar@netscape.com: 1.1786 + * 1.1787 + * The correct answer is ['ab', undefined]. Perl doesn't match 1.1788 + * ECMAScript here, and I'd say that Perl is wrong in this case. 1.1789 + */ 1.1790 +status = inSection(241); 1.1791 +pattern = /^(?:b|a(?=(.)))*\1/; 1.1792 +string = 'abc'; 1.1793 +actualmatch = string.match(pattern); 1.1794 +//expectedmatch = Array('ab', 'b'); 1.1795 +expectedmatch = Array('ab', undefined); 1.1796 +addThis(); 1.1797 + 1.1798 +status = inSection(242); 1.1799 +pattern = /^(){3,5}/; 1.1800 +string = 'abc'; 1.1801 +actualmatch = string.match(pattern); 1.1802 +expectedmatch = Array('', ''); 1.1803 +addThis(); 1.1804 + 1.1805 +status = inSection(243); 1.1806 +pattern = /^(a+)*ax/; 1.1807 +string = 'aax'; 1.1808 +actualmatch = string.match(pattern); 1.1809 +expectedmatch = Array('aax', 'a'); 1.1810 +addThis(); 1.1811 + 1.1812 +status = inSection(244); 1.1813 +pattern = /^((a|b)+)*ax/; 1.1814 +string = 'aax'; 1.1815 +actualmatch = string.match(pattern); 1.1816 +expectedmatch = Array('aax', 'a', 'a'); 1.1817 +addThis(); 1.1818 + 1.1819 +status = inSection(245); 1.1820 +pattern = /^((a|bc)+)*ax/; 1.1821 +string = 'aax'; 1.1822 +actualmatch = string.match(pattern); 1.1823 +expectedmatch = Array('aax', 'a', 'a'); 1.1824 +addThis(); 1.1825 + 1.1826 +/* MODIFIED - ECMA has different rules for paren contents */ 1.1827 +status = inSection(246); 1.1828 +pattern = /(a|x)*ab/; 1.1829 +string = 'cab'; 1.1830 +actualmatch = string.match(pattern); 1.1831 +//expectedmatch = Array('ab', ''); 1.1832 +expectedmatch = Array('ab', undefined); 1.1833 +addThis(); 1.1834 + 1.1835 +status = inSection(247); 1.1836 +pattern = /(a)*ab/; 1.1837 +string = 'cab'; 1.1838 +actualmatch = string.match(pattern); 1.1839 +expectedmatch = Array('ab', undefined); 1.1840 +addThis(); 1.1841 + 1.1842 +/* ECMA doesn't support (?imsx or (?-imsx 1.1843 + status = inSection(248); 1.1844 + pattern = /(?:(?i)a)b/; 1.1845 + string = 'ab'; 1.1846 + actualmatch = string.match(pattern); 1.1847 + expectedmatch = Array('ab'); 1.1848 + addThis(); 1.1849 + 1.1850 + status = inSection(249); 1.1851 + pattern = /((?i)a)b/; 1.1852 + string = 'ab'; 1.1853 + actualmatch = string.match(pattern); 1.1854 + expectedmatch = Array('ab', 'a'); 1.1855 + addThis(); 1.1856 + 1.1857 + status = inSection(250); 1.1858 + pattern = /(?:(?i)a)b/; 1.1859 + string = 'Ab'; 1.1860 + actualmatch = string.match(pattern); 1.1861 + expectedmatch = Array('Ab'); 1.1862 + addThis(); 1.1863 + 1.1864 + status = inSection(251); 1.1865 + pattern = /((?i)a)b/; 1.1866 + string = 'Ab'; 1.1867 + actualmatch = string.match(pattern); 1.1868 + expectedmatch = Array('Ab', 'A'); 1.1869 + addThis(); 1.1870 + 1.1871 + status = inSection(252); 1.1872 + pattern = /(?i:a)b/; 1.1873 + string = 'ab'; 1.1874 + actualmatch = string.match(pattern); 1.1875 + expectedmatch = Array('ab'); 1.1876 + addThis(); 1.1877 + 1.1878 + status = inSection(253); 1.1879 + pattern = /((?i:a))b/; 1.1880 + string = 'ab'; 1.1881 + actualmatch = string.match(pattern); 1.1882 + expectedmatch = Array('ab', 'a'); 1.1883 + addThis(); 1.1884 + 1.1885 + status = inSection(254); 1.1886 + pattern = /(?i:a)b/; 1.1887 + string = 'Ab'; 1.1888 + actualmatch = string.match(pattern); 1.1889 + expectedmatch = Array('Ab'); 1.1890 + addThis(); 1.1891 + 1.1892 + status = inSection(255); 1.1893 + pattern = /((?i:a))b/; 1.1894 + string = 'Ab'; 1.1895 + actualmatch = string.match(pattern); 1.1896 + expectedmatch = Array('Ab', 'A'); 1.1897 + addThis(); 1.1898 + 1.1899 + status = inSection(256); 1.1900 + pattern = /(?:(?-i)a)b/i; 1.1901 + string = 'ab'; 1.1902 + actualmatch = string.match(pattern); 1.1903 + expectedmatch = Array('ab'); 1.1904 + addThis(); 1.1905 + 1.1906 + status = inSection(257); 1.1907 + pattern = /((?-i)a)b/i; 1.1908 + string = 'ab'; 1.1909 + actualmatch = string.match(pattern); 1.1910 + expectedmatch = Array('ab', 'a'); 1.1911 + addThis(); 1.1912 + 1.1913 + status = inSection(258); 1.1914 + pattern = /(?:(?-i)a)b/i; 1.1915 + string = 'aB'; 1.1916 + actualmatch = string.match(pattern); 1.1917 + expectedmatch = Array('aB'); 1.1918 + addThis(); 1.1919 + 1.1920 + status = inSection(259); 1.1921 + pattern = /((?-i)a)b/i; 1.1922 + string = 'aB'; 1.1923 + actualmatch = string.match(pattern); 1.1924 + expectedmatch = Array('aB', 'a'); 1.1925 + addThis(); 1.1926 + 1.1927 + status = inSection(260); 1.1928 + pattern = /(?:(?-i)a)b/i; 1.1929 + string = 'aB'; 1.1930 + actualmatch = string.match(pattern); 1.1931 + expectedmatch = Array('aB'); 1.1932 + addThis(); 1.1933 + 1.1934 + status = inSection(261); 1.1935 + pattern = /((?-i)a)b/i; 1.1936 + string = 'aB'; 1.1937 + actualmatch = string.match(pattern); 1.1938 + expectedmatch = Array('aB', 'a'); 1.1939 + addThis(); 1.1940 + 1.1941 + status = inSection(262); 1.1942 + pattern = /(?-i:a)b/i; 1.1943 + string = 'ab'; 1.1944 + actualmatch = string.match(pattern); 1.1945 + expectedmatch = Array('ab'); 1.1946 + addThis(); 1.1947 + 1.1948 + status = inSection(263); 1.1949 + pattern = /((?-i:a))b/i; 1.1950 + string = 'ab'; 1.1951 + actualmatch = string.match(pattern); 1.1952 + expectedmatch = Array('ab', 'a'); 1.1953 + addThis(); 1.1954 + 1.1955 + status = inSection(264); 1.1956 + pattern = /(?-i:a)b/i; 1.1957 + string = 'aB'; 1.1958 + actualmatch = string.match(pattern); 1.1959 + expectedmatch = Array('aB'); 1.1960 + addThis(); 1.1961 + 1.1962 + status = inSection(265); 1.1963 + pattern = /((?-i:a))b/i; 1.1964 + string = 'aB'; 1.1965 + actualmatch = string.match(pattern); 1.1966 + expectedmatch = Array('aB', 'a'); 1.1967 + addThis(); 1.1968 + 1.1969 + status = inSection(266); 1.1970 + pattern = /(?-i:a)b/i; 1.1971 + string = 'aB'; 1.1972 + actualmatch = string.match(pattern); 1.1973 + expectedmatch = Array('aB'); 1.1974 + addThis(); 1.1975 + 1.1976 + status = inSection(267); 1.1977 + pattern = /((?-i:a))b/i; 1.1978 + string = 'aB'; 1.1979 + actualmatch = string.match(pattern); 1.1980 + expectedmatch = Array('aB', 'a'); 1.1981 + addThis(); 1.1982 + 1.1983 + status = inSection(268); 1.1984 + pattern = /((?s-i:a.))b/i; 1.1985 + string = 'a\nB'; 1.1986 + actualmatch = string.match(pattern); 1.1987 + expectedmatch = Array('a\nB', 'a\n'); 1.1988 + addThis(); 1.1989 +*/ 1.1990 + 1.1991 +status = inSection(269); 1.1992 +pattern = /(?:c|d)(?:)(?:a(?:)(?:b)(?:b(?:))(?:b(?:)(?:b)))/; 1.1993 +string = 'cabbbb'; 1.1994 +actualmatch = string.match(pattern); 1.1995 +expectedmatch = Array('cabbbb'); 1.1996 +addThis(); 1.1997 + 1.1998 +status = inSection(270); 1.1999 +pattern = /(?:c|d)(?:)(?:aaaaaaaa(?:)(?:bbbbbbbb)(?:bbbbbbbb(?:))(?:bbbbbbbb(?:)(?:bbbbbbbb)))/; 1.2000 +string = 'caaaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb'; 1.2001 +actualmatch = string.match(pattern); 1.2002 +expectedmatch = Array('caaaaaaaabbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb'); 1.2003 +addThis(); 1.2004 + 1.2005 +status = inSection(271); 1.2006 +pattern = /(ab)\d\1/i; 1.2007 +string = 'Ab4ab'; 1.2008 +actualmatch = string.match(pattern); 1.2009 +expectedmatch = Array('Ab4ab', 'Ab'); 1.2010 +addThis(); 1.2011 + 1.2012 +status = inSection(272); 1.2013 +pattern = /(ab)\d\1/i; 1.2014 +string = 'ab4Ab'; 1.2015 +actualmatch = string.match(pattern); 1.2016 +expectedmatch = Array('ab4Ab', 'ab'); 1.2017 +addThis(); 1.2018 + 1.2019 +status = inSection(273); 1.2020 +pattern = /foo\w*\d{4}baz/; 1.2021 +string = 'foobar1234baz'; 1.2022 +actualmatch = string.match(pattern); 1.2023 +expectedmatch = Array('foobar1234baz'); 1.2024 +addThis(); 1.2025 + 1.2026 +status = inSection(274); 1.2027 +pattern = /x(~~)*(?:(?:F)?)?/; 1.2028 +string = 'x~~'; 1.2029 +actualmatch = string.match(pattern); 1.2030 +expectedmatch = Array('x~~', '~~'); 1.2031 +addThis(); 1.2032 + 1.2033 +/* Perl supports (?# but JS doesn't 1.2034 + status = inSection(275); 1.2035 + pattern = /^a(?#xxx){3}c/; 1.2036 + string = 'aaac'; 1.2037 + actualmatch = string.match(pattern); 1.2038 + expectedmatch = Array('aaac'); 1.2039 + addThis(); 1.2040 +*/ 1.2041 + 1.2042 +/* ECMA doesn't support (?< etc 1.2043 + status = inSection(276); 1.2044 + pattern = /(?<![cd])[ab]/; 1.2045 + string = 'dbaacb'; 1.2046 + actualmatch = string.match(pattern); 1.2047 + expectedmatch = Array('a'); 1.2048 + addThis(); 1.2049 + 1.2050 + status = inSection(277); 1.2051 + pattern = /(?<!(c|d))[ab]/; 1.2052 + string = 'dbaacb'; 1.2053 + actualmatch = string.match(pattern); 1.2054 + expectedmatch = Array('a'); 1.2055 + addThis(); 1.2056 + 1.2057 + status = inSection(278); 1.2058 + pattern = /(?<!cd)[ab]/; 1.2059 + string = 'cdaccb'; 1.2060 + actualmatch = string.match(pattern); 1.2061 + expectedmatch = Array('b'); 1.2062 + addThis(); 1.2063 + 1.2064 + status = inSection(279); 1.2065 + pattern = /((?s)^a(.))((?m)^b$)/; 1.2066 + string = 'a\nb\nc\n'; 1.2067 + actualmatch = string.match(pattern); 1.2068 + expectedmatch = Array('a\nb', 'a\n', '\n', 'b'); 1.2069 + addThis(); 1.2070 + 1.2071 + status = inSection(280); 1.2072 + pattern = /((?m)^b$)/; 1.2073 + string = 'a\nb\nc\n'; 1.2074 + actualmatch = string.match(pattern); 1.2075 + expectedmatch = Array('b', 'b'); 1.2076 + addThis(); 1.2077 + 1.2078 + status = inSection(281); 1.2079 + pattern = /(?m)^b/; 1.2080 + string = 'a\nb\n'; 1.2081 + actualmatch = string.match(pattern); 1.2082 + expectedmatch = Array('b'); 1.2083 + addThis(); 1.2084 + 1.2085 + status = inSection(282); 1.2086 + pattern = /(?m)^(b)/; 1.2087 + string = 'a\nb\n'; 1.2088 + actualmatch = string.match(pattern); 1.2089 + expectedmatch = Array('b', 'b'); 1.2090 + addThis(); 1.2091 + 1.2092 + status = inSection(283); 1.2093 + pattern = /((?m)^b)/; 1.2094 + string = 'a\nb\n'; 1.2095 + actualmatch = string.match(pattern); 1.2096 + expectedmatch = Array('b', 'b'); 1.2097 + addThis(); 1.2098 + 1.2099 + status = inSection(284); 1.2100 + pattern = /\n((?m)^b)/; 1.2101 + string = 'a\nb\n'; 1.2102 + actualmatch = string.match(pattern); 1.2103 + expectedmatch = Array('\nb', 'b'); 1.2104 + addThis(); 1.2105 + 1.2106 + status = inSection(285); 1.2107 + pattern = /((?s).)c(?!.)/; 1.2108 + string = 'a\nb\nc\n'; 1.2109 + actualmatch = string.match(pattern); 1.2110 + expectedmatch = Array('\nc', '\n'); 1.2111 + addThis(); 1.2112 + 1.2113 + status = inSection(286); 1.2114 + pattern = /((?s).)c(?!.)/; 1.2115 + string = 'a\nb\nc\n'; 1.2116 + actualmatch = string.match(pattern); 1.2117 + expectedmatch = Array('\nc', '\n'); 1.2118 + addThis(); 1.2119 + 1.2120 + status = inSection(287); 1.2121 + pattern = /((?s)b.)c(?!.)/; 1.2122 + string = 'a\nb\nc\n'; 1.2123 + actualmatch = string.match(pattern); 1.2124 + expectedmatch = Array('b\nc', 'b\n'); 1.2125 + addThis(); 1.2126 + 1.2127 + status = inSection(288); 1.2128 + pattern = /((?s)b.)c(?!.)/; 1.2129 + string = 'a\nb\nc\n'; 1.2130 + actualmatch = string.match(pattern); 1.2131 + expectedmatch = Array('b\nc', 'b\n'); 1.2132 + addThis(); 1.2133 + 1.2134 + status = inSection(289); 1.2135 + pattern = /((?m)^b)/; 1.2136 + string = 'a\nb\nc\n'; 1.2137 + actualmatch = string.match(pattern); 1.2138 + expectedmatch = Array('b', 'b'); 1.2139 + addThis(); 1.2140 +*/ 1.2141 + 1.2142 +/* ECMA doesn't support (?(condition) 1.2143 + status = inSection(290); 1.2144 + pattern = /(?(1)b|a)/; 1.2145 + string = 'a'; 1.2146 + actualmatch = string.match(pattern); 1.2147 + expectedmatch = Array('a'); 1.2148 + addThis(); 1.2149 + 1.2150 + status = inSection(291); 1.2151 + pattern = /(x)?(?(1)b|a)/; 1.2152 + string = 'a'; 1.2153 + actualmatch = string.match(pattern); 1.2154 + expectedmatch = Array('a'); 1.2155 + addThis(); 1.2156 + 1.2157 + status = inSection(292); 1.2158 + pattern = /()?(?(1)b|a)/; 1.2159 + string = 'a'; 1.2160 + actualmatch = string.match(pattern); 1.2161 + expectedmatch = Array('a'); 1.2162 + addThis(); 1.2163 + 1.2164 + status = inSection(293); 1.2165 + pattern = /()?(?(1)a|b)/; 1.2166 + string = 'a'; 1.2167 + actualmatch = string.match(pattern); 1.2168 + expectedmatch = Array('a'); 1.2169 + addThis(); 1.2170 + 1.2171 + status = inSection(294); 1.2172 + pattern = /^(\()?blah(?(1)(\)))$/; 1.2173 + string = '(blah)'; 1.2174 + actualmatch = string.match(pattern); 1.2175 + expectedmatch = Array('(blah)', '(', ')'); 1.2176 + addThis(); 1.2177 + 1.2178 + status = inSection(295); 1.2179 + pattern = /^(\()?blah(?(1)(\)))$/; 1.2180 + string = 'blah'; 1.2181 + actualmatch = string.match(pattern); 1.2182 + expectedmatch = Array('blah'); 1.2183 + addThis(); 1.2184 + 1.2185 + status = inSection(296); 1.2186 + pattern = /^(\(+)?blah(?(1)(\)))$/; 1.2187 + string = '(blah)'; 1.2188 + actualmatch = string.match(pattern); 1.2189 + expectedmatch = Array('(blah)', '(', ')'); 1.2190 + addThis(); 1.2191 + 1.2192 + status = inSection(297); 1.2193 + pattern = /^(\(+)?blah(?(1)(\)))$/; 1.2194 + string = 'blah'; 1.2195 + actualmatch = string.match(pattern); 1.2196 + expectedmatch = Array('blah'); 1.2197 + addThis(); 1.2198 + 1.2199 + status = inSection(298); 1.2200 + pattern = /(?(?!a)b|a)/; 1.2201 + string = 'a'; 1.2202 + actualmatch = string.match(pattern); 1.2203 + expectedmatch = Array('a'); 1.2204 + addThis(); 1.2205 + 1.2206 + status = inSection(299); 1.2207 + pattern = /(?(?=a)a|b)/; 1.2208 + string = 'a'; 1.2209 + actualmatch = string.match(pattern); 1.2210 + expectedmatch = Array('a'); 1.2211 + addThis(); 1.2212 +*/ 1.2213 + 1.2214 +status = inSection(300); 1.2215 +pattern = /(?=(a+?))(\1ab)/; 1.2216 +string = 'aaab'; 1.2217 +actualmatch = string.match(pattern); 1.2218 +expectedmatch = Array('aab', 'a', 'aab'); 1.2219 +addThis(); 1.2220 + 1.2221 +status = inSection(301); 1.2222 +pattern = /(\w+:)+/; 1.2223 +string = 'one:'; 1.2224 +actualmatch = string.match(pattern); 1.2225 +expectedmatch = Array('one:', 'one:'); 1.2226 +addThis(); 1.2227 + 1.2228 +/* ECMA doesn't support (?< etc 1.2229 + status = inSection(302); 1.2230 + pattern = /$(?<=^(a))/; 1.2231 + string = 'a'; 1.2232 + actualmatch = string.match(pattern); 1.2233 + expectedmatch = Array('', 'a'); 1.2234 + addThis(); 1.2235 +*/ 1.2236 + 1.2237 +status = inSection(303); 1.2238 +pattern = /(?=(a+?))(\1ab)/; 1.2239 +string = 'aaab'; 1.2240 +actualmatch = string.match(pattern); 1.2241 +expectedmatch = Array('aab', 'a', 'aab'); 1.2242 +addThis(); 1.2243 + 1.2244 +/* MODIFIED - ECMA has different rules for paren contents */ 1.2245 +status = inSection(304); 1.2246 +pattern = /([\w:]+::)?(\w+)$/; 1.2247 +string = 'abcd'; 1.2248 +actualmatch = string.match(pattern); 1.2249 +//expectedmatch = Array('abcd', '', 'abcd'); 1.2250 +expectedmatch = Array('abcd', undefined, 'abcd'); 1.2251 +addThis(); 1.2252 + 1.2253 +status = inSection(305); 1.2254 +pattern = /([\w:]+::)?(\w+)$/; 1.2255 +string = 'xy:z:::abcd'; 1.2256 +actualmatch = string.match(pattern); 1.2257 +expectedmatch = Array('xy:z:::abcd', 'xy:z:::', 'abcd'); 1.2258 +addThis(); 1.2259 + 1.2260 +status = inSection(306); 1.2261 +pattern = /^[^bcd]*(c+)/; 1.2262 +string = 'aexycd'; 1.2263 +actualmatch = string.match(pattern); 1.2264 +expectedmatch = Array('aexyc', 'c'); 1.2265 +addThis(); 1.2266 + 1.2267 +status = inSection(307); 1.2268 +pattern = /(a*)b+/; 1.2269 +string = 'caab'; 1.2270 +actualmatch = string.match(pattern); 1.2271 +expectedmatch = Array('aab', 'aa'); 1.2272 +addThis(); 1.2273 + 1.2274 +/* MODIFIED - ECMA has different rules for paren contents */ 1.2275 +status = inSection(308); 1.2276 +pattern = /([\w:]+::)?(\w+)$/; 1.2277 +string = 'abcd'; 1.2278 +actualmatch = string.match(pattern); 1.2279 +//expectedmatch = Array('abcd', '', 'abcd'); 1.2280 +expectedmatch = Array('abcd', undefined, 'abcd'); 1.2281 +addThis(); 1.2282 + 1.2283 +status = inSection(309); 1.2284 +pattern = /([\w:]+::)?(\w+)$/; 1.2285 +string = 'xy:z:::abcd'; 1.2286 +actualmatch = string.match(pattern); 1.2287 +expectedmatch = Array('xy:z:::abcd', 'xy:z:::', 'abcd'); 1.2288 +addThis(); 1.2289 + 1.2290 +status = inSection(310); 1.2291 +pattern = /^[^bcd]*(c+)/; 1.2292 +string = 'aexycd'; 1.2293 +actualmatch = string.match(pattern); 1.2294 +expectedmatch = Array('aexyc', 'c'); 1.2295 +addThis(); 1.2296 + 1.2297 +/* ECMA doesn't support (?> 1.2298 + status = inSection(311); 1.2299 + pattern = /(?>a+)b/; 1.2300 + string = 'aaab'; 1.2301 + actualmatch = string.match(pattern); 1.2302 + expectedmatch = Array('aaab'); 1.2303 + addThis(); 1.2304 +*/ 1.2305 + 1.2306 +status = inSection(312); 1.2307 +pattern = /([[:]+)/; 1.2308 + string = 'a:[b]:'; 1.2309 + actualmatch = string.match(pattern); 1.2310 + expectedmatch = Array(':[', ':['); 1.2311 + addThis(); 1.2312 + 1.2313 + status = inSection(313); 1.2314 + pattern = /([[=]+)/; 1.2315 + string = 'a=[b]='; 1.2316 + actualmatch = string.match(pattern); 1.2317 + expectedmatch = Array('=[', '=['); 1.2318 + addThis(); 1.2319 + 1.2320 + status = inSection(314); 1.2321 + pattern = /([[.]+)/; 1.2322 + string = 'a.[b].'; 1.2323 + actualmatch = string.match(pattern); 1.2324 + expectedmatch = Array('.[', '.['); 1.2325 + addThis(); 1.2326 + 1.2327 +/* ECMA doesn't have rules for [: 1.2328 + status = inSection(315); 1.2329 + pattern = /[a[:]b[:c]/; 1.2330 + string = 'abc'; 1.2331 + actualmatch = string.match(pattern); 1.2332 + expectedmatch = Array('abc'); 1.2333 + addThis(); 1.2334 +*/ 1.2335 + 1.2336 +/* ECMA doesn't support (?> 1.2337 + status = inSection(316); 1.2338 + pattern = /((?>a+)b)/; 1.2339 + string = 'aaab'; 1.2340 + actualmatch = string.match(pattern); 1.2341 + expectedmatch = Array('aaab', 'aaab'); 1.2342 + addThis(); 1.2343 + 1.2344 + status = inSection(317); 1.2345 + pattern = /(?>(a+))b/; 1.2346 + string = 'aaab'; 1.2347 + actualmatch = string.match(pattern); 1.2348 + expectedmatch = Array('aaab', 'aaa'); 1.2349 + addThis(); 1.2350 + 1.2351 + status = inSection(318); 1.2352 + pattern = /((?>[^()]+)|\([^()]*\))+/; 1.2353 + string = '((abc(ade)ufh()()x'; 1.2354 + actualmatch = string.match(pattern); 1.2355 + expectedmatch = Array('abc(ade)ufh()()x', 'x'); 1.2356 + addThis(); 1.2357 +*/ 1.2358 + 1.2359 +/* Perl has \Z has end-of-line, ECMA doesn't 1.2360 + status = inSection(319); 1.2361 + pattern = /\Z/; 1.2362 + string = 'a\nb\n'; 1.2363 + actualmatch = string.match(pattern); 1.2364 + expectedmatch = Array(''); 1.2365 + addThis(); 1.2366 + 1.2367 + status = inSection(320); 1.2368 + pattern = /\z/; 1.2369 + string = 'a\nb\n'; 1.2370 + actualmatch = string.match(pattern); 1.2371 + expectedmatch = Array(''); 1.2372 + addThis(); 1.2373 +*/ 1.2374 + 1.2375 + status = inSection(321); 1.2376 + pattern = /$/; 1.2377 + string = 'a\nb\n'; 1.2378 + actualmatch = string.match(pattern); 1.2379 + expectedmatch = Array(''); 1.2380 + addThis(); 1.2381 + 1.2382 +/* Perl has \Z has end-of-line, ECMA doesn't 1.2383 + status = inSection(322); 1.2384 + pattern = /\Z/; 1.2385 + string = 'b\na\n'; 1.2386 + actualmatch = string.match(pattern); 1.2387 + expectedmatch = Array(''); 1.2388 + addThis(); 1.2389 + 1.2390 + status = inSection(323); 1.2391 + pattern = /\z/; 1.2392 + string = 'b\na\n'; 1.2393 + actualmatch = string.match(pattern); 1.2394 + expectedmatch = Array(''); 1.2395 + addThis(); 1.2396 +*/ 1.2397 + 1.2398 + status = inSection(324); 1.2399 + pattern = /$/; 1.2400 + string = 'b\na\n'; 1.2401 + actualmatch = string.match(pattern); 1.2402 + expectedmatch = Array(''); 1.2403 + addThis(); 1.2404 + 1.2405 +/* Perl has \Z has end-of-line, ECMA doesn't 1.2406 + status = inSection(325); 1.2407 + pattern = /\Z/; 1.2408 + string = 'b\na'; 1.2409 + actualmatch = string.match(pattern); 1.2410 + expectedmatch = Array(''); 1.2411 + addThis(); 1.2412 + 1.2413 + status = inSection(326); 1.2414 + pattern = /\z/; 1.2415 + string = 'b\na'; 1.2416 + actualmatch = string.match(pattern); 1.2417 + expectedmatch = Array(''); 1.2418 + addThis(); 1.2419 +*/ 1.2420 + 1.2421 + status = inSection(327); 1.2422 + pattern = /$/; 1.2423 + string = 'b\na'; 1.2424 + actualmatch = string.match(pattern); 1.2425 + expectedmatch = Array(''); 1.2426 + addThis(); 1.2427 + 1.2428 +/* Perl has \Z has end-of-line, ECMA doesn't 1.2429 + status = inSection(328); 1.2430 + pattern = /\Z/m; 1.2431 + string = 'a\nb\n'; 1.2432 + actualmatch = string.match(pattern); 1.2433 + expectedmatch = Array(''); 1.2434 + addThis(); 1.2435 + 1.2436 + status = inSection(329); 1.2437 + pattern = /\z/m; 1.2438 + string = 'a\nb\n'; 1.2439 + actualmatch = string.match(pattern); 1.2440 + expectedmatch = Array(''); 1.2441 + addThis(); 1.2442 +*/ 1.2443 + 1.2444 + status = inSection(330); 1.2445 + pattern = /$/m; 1.2446 + string = 'a\nb\n'; 1.2447 + actualmatch = string.match(pattern); 1.2448 + expectedmatch = Array(''); 1.2449 + addThis(); 1.2450 + 1.2451 +/* Perl has \Z has end-of-line, ECMA doesn't 1.2452 + status = inSection(331); 1.2453 + pattern = /\Z/m; 1.2454 + string = 'b\na\n'; 1.2455 + actualmatch = string.match(pattern); 1.2456 + expectedmatch = Array(''); 1.2457 + addThis(); 1.2458 + 1.2459 + status = inSection(332); 1.2460 + pattern = /\z/m; 1.2461 + string = 'b\na\n'; 1.2462 + actualmatch = string.match(pattern); 1.2463 + expectedmatch = Array(''); 1.2464 + addThis(); 1.2465 +*/ 1.2466 + 1.2467 + status = inSection(333); 1.2468 + pattern = /$/m; 1.2469 + string = 'b\na\n'; 1.2470 + actualmatch = string.match(pattern); 1.2471 + expectedmatch = Array(''); 1.2472 + addThis(); 1.2473 + 1.2474 +/* Perl has \Z has end-of-line, ECMA doesn't 1.2475 + status = inSection(334); 1.2476 + pattern = /\Z/m; 1.2477 + string = 'b\na'; 1.2478 + actualmatch = string.match(pattern); 1.2479 + expectedmatch = Array(''); 1.2480 + addThis(); 1.2481 + 1.2482 + status = inSection(335); 1.2483 + pattern = /\z/m; 1.2484 + string = 'b\na'; 1.2485 + actualmatch = string.match(pattern); 1.2486 + expectedmatch = Array(''); 1.2487 + addThis(); 1.2488 +*/ 1.2489 + 1.2490 + status = inSection(336); 1.2491 + pattern = /$/m; 1.2492 + string = 'b\na'; 1.2493 + actualmatch = string.match(pattern); 1.2494 + expectedmatch = Array(''); 1.2495 + addThis(); 1.2496 + 1.2497 +/* Perl has \Z has end-of-line, ECMA doesn't 1.2498 + status = inSection(337); 1.2499 + pattern = /a\Z/; 1.2500 + string = 'b\na\n'; 1.2501 + actualmatch = string.match(pattern); 1.2502 + expectedmatch = Array('a'); 1.2503 + addThis(); 1.2504 +*/ 1.2505 + 1.2506 +/* $ only matches end of input unless multiline 1.2507 + status = inSection(338); 1.2508 + pattern = /a$/; 1.2509 + string = 'b\na\n'; 1.2510 + actualmatch = string.match(pattern); 1.2511 + expectedmatch = Array('a'); 1.2512 + addThis(); 1.2513 +*/ 1.2514 + 1.2515 +/* Perl has \Z has end-of-line, ECMA doesn't 1.2516 + status = inSection(339); 1.2517 + pattern = /a\Z/; 1.2518 + string = 'b\na'; 1.2519 + actualmatch = string.match(pattern); 1.2520 + expectedmatch = Array('a'); 1.2521 + addThis(); 1.2522 + 1.2523 + status = inSection(340); 1.2524 + pattern = /a\z/; 1.2525 + string = 'b\na'; 1.2526 + actualmatch = string.match(pattern); 1.2527 + expectedmatch = Array('a'); 1.2528 + addThis(); 1.2529 +*/ 1.2530 + 1.2531 + status = inSection(341); 1.2532 + pattern = /a$/; 1.2533 + string = 'b\na'; 1.2534 + actualmatch = string.match(pattern); 1.2535 + expectedmatch = Array('a'); 1.2536 + addThis(); 1.2537 + 1.2538 + status = inSection(342); 1.2539 + pattern = /a$/m; 1.2540 + string = 'a\nb\n'; 1.2541 + actualmatch = string.match(pattern); 1.2542 + expectedmatch = Array('a'); 1.2543 + addThis(); 1.2544 + 1.2545 +/* Perl has \Z has end-of-line, ECMA doesn't 1.2546 + status = inSection(343); 1.2547 + pattern = /a\Z/m; 1.2548 + string = 'b\na\n'; 1.2549 + actualmatch = string.match(pattern); 1.2550 + expectedmatch = Array('a'); 1.2551 + addThis(); 1.2552 +*/ 1.2553 + 1.2554 + status = inSection(344); 1.2555 + pattern = /a$/m; 1.2556 + string = 'b\na\n'; 1.2557 + actualmatch = string.match(pattern); 1.2558 + expectedmatch = Array('a'); 1.2559 + addThis(); 1.2560 + 1.2561 +/* Perl has \Z has end-of-line, ECMA doesn't 1.2562 + status = inSection(345); 1.2563 + pattern = /a\Z/m; 1.2564 + string = 'b\na'; 1.2565 + actualmatch = string.match(pattern); 1.2566 + expectedmatch = Array('a'); 1.2567 + addThis(); 1.2568 + 1.2569 + status = inSection(346); 1.2570 + pattern = /a\z/m; 1.2571 + string = 'b\na'; 1.2572 + actualmatch = string.match(pattern); 1.2573 + expectedmatch = Array('a'); 1.2574 + addThis(); 1.2575 +*/ 1.2576 + 1.2577 + status = inSection(347); 1.2578 + pattern = /a$/m; 1.2579 + string = 'b\na'; 1.2580 + actualmatch = string.match(pattern); 1.2581 + expectedmatch = Array('a'); 1.2582 + addThis(); 1.2583 + 1.2584 +/* Perl has \Z has end-of-line, ECMA doesn't 1.2585 + status = inSection(348); 1.2586 + pattern = /aa\Z/; 1.2587 + string = 'b\naa\n'; 1.2588 + actualmatch = string.match(pattern); 1.2589 + expectedmatch = Array('aa'); 1.2590 + addThis(); 1.2591 +*/ 1.2592 + 1.2593 +/* $ only matches end of input unless multiline 1.2594 + status = inSection(349); 1.2595 + pattern = /aa$/; 1.2596 + string = 'b\naa\n'; 1.2597 + actualmatch = string.match(pattern); 1.2598 + expectedmatch = Array('aa'); 1.2599 + addThis(); 1.2600 +*/ 1.2601 + 1.2602 +/* Perl has \Z has end-of-line, ECMA doesn't 1.2603 + status = inSection(350); 1.2604 + pattern = /aa\Z/; 1.2605 + string = 'b\naa'; 1.2606 + actualmatch = string.match(pattern); 1.2607 + expectedmatch = Array('aa'); 1.2608 + addThis(); 1.2609 + 1.2610 + status = inSection(351); 1.2611 + pattern = /aa\z/; 1.2612 + string = 'b\naa'; 1.2613 + actualmatch = string.match(pattern); 1.2614 + expectedmatch = Array('aa'); 1.2615 + addThis(); 1.2616 +*/ 1.2617 + 1.2618 + status = inSection(352); 1.2619 + pattern = /aa$/; 1.2620 + string = 'b\naa'; 1.2621 + actualmatch = string.match(pattern); 1.2622 + expectedmatch = Array('aa'); 1.2623 + addThis(); 1.2624 + 1.2625 + status = inSection(353); 1.2626 + pattern = /aa$/m; 1.2627 + string = 'aa\nb\n'; 1.2628 + actualmatch = string.match(pattern); 1.2629 + expectedmatch = Array('aa'); 1.2630 + addThis(); 1.2631 + 1.2632 +/* Perl has \Z has end-of-line, ECMA doesn't 1.2633 + status = inSection(354); 1.2634 + pattern = /aa\Z/m; 1.2635 + string = 'b\naa\n'; 1.2636 + actualmatch = string.match(pattern); 1.2637 + expectedmatch = Array('aa'); 1.2638 + addThis(); 1.2639 +*/ 1.2640 + 1.2641 + status = inSection(355); 1.2642 + pattern = /aa$/m; 1.2643 + string = 'b\naa\n'; 1.2644 + actualmatch = string.match(pattern); 1.2645 + expectedmatch = Array('aa'); 1.2646 + addThis(); 1.2647 + 1.2648 +/* Perl has \Z has end-of-line, ECMA doesn't 1.2649 + status = inSection(356); 1.2650 + pattern = /aa\Z/m; 1.2651 + string = 'b\naa'; 1.2652 + actualmatch = string.match(pattern); 1.2653 + expectedmatch = Array('aa'); 1.2654 + addThis(); 1.2655 + 1.2656 + status = inSection(357); 1.2657 + pattern = /aa\z/m; 1.2658 + string = 'b\naa'; 1.2659 + actualmatch = string.match(pattern); 1.2660 + expectedmatch = Array('aa'); 1.2661 + addThis(); 1.2662 +*/ 1.2663 + 1.2664 + status = inSection(358); 1.2665 + pattern = /aa$/m; 1.2666 + string = 'b\naa'; 1.2667 + actualmatch = string.match(pattern); 1.2668 + expectedmatch = Array('aa'); 1.2669 + addThis(); 1.2670 + 1.2671 +/* Perl has \Z has end-of-line, ECMA doesn't 1.2672 + status = inSection(359); 1.2673 + pattern = /ab\Z/; 1.2674 + string = 'b\nab\n'; 1.2675 + actualmatch = string.match(pattern); 1.2676 + expectedmatch = Array('ab'); 1.2677 + addThis(); 1.2678 +*/ 1.2679 + 1.2680 +/* $ only matches end of input unless multiline 1.2681 + status = inSection(360); 1.2682 + pattern = /ab$/; 1.2683 + string = 'b\nab\n'; 1.2684 + actualmatch = string.match(pattern); 1.2685 + expectedmatch = Array('ab'); 1.2686 + addThis(); 1.2687 +*/ 1.2688 + 1.2689 +/* Perl has \Z has end-of-line, ECMA doesn't 1.2690 + status = inSection(361); 1.2691 + pattern = /ab\Z/; 1.2692 + string = 'b\nab'; 1.2693 + actualmatch = string.match(pattern); 1.2694 + expectedmatch = Array('ab'); 1.2695 + addThis(); 1.2696 + 1.2697 + status = inSection(362); 1.2698 + pattern = /ab\z/; 1.2699 + string = 'b\nab'; 1.2700 + actualmatch = string.match(pattern); 1.2701 + expectedmatch = Array('ab'); 1.2702 + addThis(); 1.2703 +*/ 1.2704 + 1.2705 + status = inSection(363); 1.2706 + pattern = /ab$/; 1.2707 + string = 'b\nab'; 1.2708 + actualmatch = string.match(pattern); 1.2709 + expectedmatch = Array('ab'); 1.2710 + addThis(); 1.2711 + 1.2712 + status = inSection(364); 1.2713 + pattern = /ab$/m; 1.2714 + string = 'ab\nb\n'; 1.2715 + actualmatch = string.match(pattern); 1.2716 + expectedmatch = Array('ab'); 1.2717 + addThis(); 1.2718 + 1.2719 +/* Perl has \Z has end-of-line, ECMA doesn't 1.2720 + status = inSection(365); 1.2721 + pattern = /ab\Z/m; 1.2722 + string = 'b\nab\n'; 1.2723 + actualmatch = string.match(pattern); 1.2724 + expectedmatch = Array('ab'); 1.2725 + addThis(); 1.2726 +*/ 1.2727 + 1.2728 + status = inSection(366); 1.2729 + pattern = /ab$/m; 1.2730 + string = 'b\nab\n'; 1.2731 + actualmatch = string.match(pattern); 1.2732 + expectedmatch = Array('ab'); 1.2733 + addThis(); 1.2734 + 1.2735 +/* Perl has \Z has end-of-line, ECMA doesn't 1.2736 + status = inSection(367); 1.2737 + pattern = /ab\Z/m; 1.2738 + string = 'b\nab'; 1.2739 + actualmatch = string.match(pattern); 1.2740 + expectedmatch = Array('ab'); 1.2741 + addThis(); 1.2742 + 1.2743 + status = inSection(368); 1.2744 + pattern = /ab\z/m; 1.2745 + string = 'b\nab'; 1.2746 + actualmatch = string.match(pattern); 1.2747 + expectedmatch = Array('ab'); 1.2748 + addThis(); 1.2749 +*/ 1.2750 + 1.2751 + status = inSection(369); 1.2752 + pattern = /ab$/m; 1.2753 + string = 'b\nab'; 1.2754 + actualmatch = string.match(pattern); 1.2755 + expectedmatch = Array('ab'); 1.2756 + addThis(); 1.2757 + 1.2758 +/* Perl has \Z has end-of-line, ECMA doesn't 1.2759 + status = inSection(370); 1.2760 + pattern = /abb\Z/; 1.2761 + string = 'b\nabb\n'; 1.2762 + actualmatch = string.match(pattern); 1.2763 + expectedmatch = Array('abb'); 1.2764 + addThis(); 1.2765 +*/ 1.2766 + 1.2767 +/* $ only matches end of input unless multiline 1.2768 + status = inSection(371); 1.2769 + pattern = /abb$/; 1.2770 + string = 'b\nabb\n'; 1.2771 + actualmatch = string.match(pattern); 1.2772 + expectedmatch = Array('abb'); 1.2773 + addThis(); 1.2774 +*/ 1.2775 + 1.2776 +/* Perl has \Z has end-of-line, ECMA doesn't 1.2777 + status = inSection(372); 1.2778 + pattern = /abb\Z/; 1.2779 + string = 'b\nabb'; 1.2780 + actualmatch = string.match(pattern); 1.2781 + expectedmatch = Array('abb'); 1.2782 + addThis(); 1.2783 + 1.2784 + status = inSection(373); 1.2785 + pattern = /abb\z/; 1.2786 + string = 'b\nabb'; 1.2787 + actualmatch = string.match(pattern); 1.2788 + expectedmatch = Array('abb'); 1.2789 + addThis(); 1.2790 +*/ 1.2791 + 1.2792 + status = inSection(374); 1.2793 + pattern = /abb$/; 1.2794 + string = 'b\nabb'; 1.2795 + actualmatch = string.match(pattern); 1.2796 + expectedmatch = Array('abb'); 1.2797 + addThis(); 1.2798 + 1.2799 + status = inSection(375); 1.2800 + pattern = /abb$/m; 1.2801 + string = 'abb\nb\n'; 1.2802 + actualmatch = string.match(pattern); 1.2803 + expectedmatch = Array('abb'); 1.2804 + addThis(); 1.2805 + 1.2806 +/* Perl has \Z has end-of-line, ECMA doesn't 1.2807 + status = inSection(376); 1.2808 + pattern = /abb\Z/m; 1.2809 + string = 'b\nabb\n'; 1.2810 + actualmatch = string.match(pattern); 1.2811 + expectedmatch = Array('abb'); 1.2812 + addThis(); 1.2813 +*/ 1.2814 + 1.2815 + status = inSection(377); 1.2816 + pattern = /abb$/m; 1.2817 + string = 'b\nabb\n'; 1.2818 + actualmatch = string.match(pattern); 1.2819 + expectedmatch = Array('abb'); 1.2820 + addThis(); 1.2821 + 1.2822 +/* Perl has \Z has end-of-line, ECMA doesn't 1.2823 + status = inSection(378); 1.2824 + pattern = /abb\Z/m; 1.2825 + string = 'b\nabb'; 1.2826 + actualmatch = string.match(pattern); 1.2827 + expectedmatch = Array('abb'); 1.2828 + addThis(); 1.2829 + 1.2830 + status = inSection(379); 1.2831 + pattern = /abb\z/m; 1.2832 + string = 'b\nabb'; 1.2833 + actualmatch = string.match(pattern); 1.2834 + expectedmatch = Array('abb'); 1.2835 + addThis(); 1.2836 +*/ 1.2837 + 1.2838 + status = inSection(380); 1.2839 + pattern = /abb$/m; 1.2840 + string = 'b\nabb'; 1.2841 + actualmatch = string.match(pattern); 1.2842 + expectedmatch = Array('abb'); 1.2843 + addThis(); 1.2844 + 1.2845 + status = inSection(381); 1.2846 + pattern = /(^|x)(c)/; 1.2847 + string = 'ca'; 1.2848 + actualmatch = string.match(pattern); 1.2849 + expectedmatch = Array('c', '', 'c'); 1.2850 + addThis(); 1.2851 + 1.2852 + status = inSection(382); 1.2853 + pattern = /foo.bart/; 1.2854 + string = 'foo.bart'; 1.2855 + actualmatch = string.match(pattern); 1.2856 + expectedmatch = Array('foo.bart'); 1.2857 + addThis(); 1.2858 + 1.2859 + status = inSection(383); 1.2860 + pattern = /^d[x][x][x]/m; 1.2861 + string = 'abcd\ndxxx'; 1.2862 + actualmatch = string.match(pattern); 1.2863 + expectedmatch = Array('dxxx'); 1.2864 + addThis(); 1.2865 + 1.2866 + status = inSection(384); 1.2867 + pattern = /tt+$/; 1.2868 + string = 'xxxtt'; 1.2869 + actualmatch = string.match(pattern); 1.2870 + expectedmatch = Array('tt'); 1.2871 + addThis(); 1.2872 + 1.2873 +/* ECMA spec says that each atom in a range must be a single character 1.2874 + status = inSection(385); 1.2875 + pattern = /([a-\d]+)/; 1.2876 + string = 'za-9z'; 1.2877 + actualmatch = string.match(pattern); 1.2878 + expectedmatch = Array('9', '9'); 1.2879 + addThis(); 1.2880 + 1.2881 + status = inSection(386); 1.2882 + pattern = /([\d-z]+)/; 1.2883 + string = 'a0-za'; 1.2884 + actualmatch = string.match(pattern); 1.2885 + expectedmatch = Array('0-z', '0-z'); 1.2886 + addThis(); 1.2887 +*/ 1.2888 + 1.2889 +/* ECMA doesn't support [: 1.2890 + status = inSection(387); 1.2891 + pattern = /([a-[:digit:]]+)/; 1.2892 + string = 'za-9z'; 1.2893 + actualmatch = string.match(pattern); 1.2894 + expectedmatch = Array('a-9', 'a-9'); 1.2895 + addThis(); 1.2896 + 1.2897 + status = inSection(388); 1.2898 + pattern = /([[:digit:]-z]+)/; 1.2899 + string = '=0-z='; 1.2900 + actualmatch = string.match(pattern); 1.2901 + expectedmatch = Array('0-z', '0-z'); 1.2902 + addThis(); 1.2903 + 1.2904 + status = inSection(389); 1.2905 + pattern = /([[:digit:]-[:alpha:]]+)/; 1.2906 + string = '=0-z='; 1.2907 + actualmatch = string.match(pattern); 1.2908 + expectedmatch = Array('0-z', '0-z'); 1.2909 + addThis(); 1.2910 +*/ 1.2911 + 1.2912 + status = inSection(390); 1.2913 + pattern = /(\d+\.\d+)/; 1.2914 + string = '3.1415926'; 1.2915 + actualmatch = string.match(pattern); 1.2916 + expectedmatch = Array('3.1415926', '3.1415926'); 1.2917 + addThis(); 1.2918 + 1.2919 + status = inSection(391); 1.2920 + pattern = /\.c(pp|xx|c)?$/i; 1.2921 + string = 'IO.c'; 1.2922 + actualmatch = string.match(pattern); 1.2923 + expectedmatch = Array('.c', undefined); 1.2924 + addThis(); 1.2925 + 1.2926 + status = inSection(392); 1.2927 + pattern = /(\.c(pp|xx|c)?$)/i; 1.2928 + string = 'IO.c'; 1.2929 + actualmatch = string.match(pattern); 1.2930 + expectedmatch = Array('.c', '.c', undefined); 1.2931 + addThis(); 1.2932 + 1.2933 + status = inSection(393); 1.2934 + pattern = /(^|a)b/; 1.2935 + string = 'ab'; 1.2936 + actualmatch = string.match(pattern); 1.2937 + expectedmatch = Array('ab', 'a'); 1.2938 + addThis(); 1.2939 + 1.2940 + status = inSection(394); 1.2941 + pattern = /^([ab]*?)(b)?(c)$/; 1.2942 + string = 'abac'; 1.2943 + actualmatch = string.match(pattern); 1.2944 + expectedmatch = Array('abac', 'aba', undefined, 'c'); 1.2945 + addThis(); 1.2946 + 1.2947 + status = inSection(395); 1.2948 + pattern = /^(?:.,){2}c/i; 1.2949 + string = 'a,b,c'; 1.2950 + actualmatch = string.match(pattern); 1.2951 + expectedmatch = Array('a,b,c'); 1.2952 + addThis(); 1.2953 + 1.2954 + status = inSection(396); 1.2955 + pattern = /^(.,){2}c/i; 1.2956 + string = 'a,b,c'; 1.2957 + actualmatch = string.match(pattern); 1.2958 + expectedmatch = Array('a,b,c', 'b,'); 1.2959 + addThis(); 1.2960 + 1.2961 + status = inSection(397); 1.2962 + pattern = /^(?:[^,]*,){2}c/; 1.2963 + string = 'a,b,c'; 1.2964 + actualmatch = string.match(pattern); 1.2965 + expectedmatch = Array('a,b,c'); 1.2966 + addThis(); 1.2967 + 1.2968 + status = inSection(398); 1.2969 + pattern = /^([^,]*,){2}c/; 1.2970 + string = 'a,b,c'; 1.2971 + actualmatch = string.match(pattern); 1.2972 + expectedmatch = Array('a,b,c', 'b,'); 1.2973 + addThis(); 1.2974 + 1.2975 + status = inSection(399); 1.2976 + pattern = /^([^,]*,){3}d/; 1.2977 + string = 'aaa,b,c,d'; 1.2978 + actualmatch = string.match(pattern); 1.2979 + expectedmatch = Array('aaa,b,c,d', 'c,'); 1.2980 + addThis(); 1.2981 + 1.2982 + status = inSection(400); 1.2983 + pattern = /^([^,]*,){3,}d/; 1.2984 + string = 'aaa,b,c,d'; 1.2985 + actualmatch = string.match(pattern); 1.2986 + expectedmatch = Array('aaa,b,c,d', 'c,'); 1.2987 + addThis(); 1.2988 + 1.2989 + status = inSection(401); 1.2990 + pattern = /^([^,]*,){0,3}d/; 1.2991 + string = 'aaa,b,c,d'; 1.2992 + actualmatch = string.match(pattern); 1.2993 + expectedmatch = Array('aaa,b,c,d', 'c,'); 1.2994 + addThis(); 1.2995 + 1.2996 + status = inSection(402); 1.2997 + pattern = /^([^,]{1,3},){3}d/i; 1.2998 + string = 'aaa,b,c,d'; 1.2999 + actualmatch = string.match(pattern); 1.3000 + expectedmatch = Array('aaa,b,c,d', 'c,'); 1.3001 + addThis(); 1.3002 + 1.3003 + status = inSection(403); 1.3004 + pattern = /^([^,]{1,3},){3,}d/; 1.3005 + string = 'aaa,b,c,d'; 1.3006 + actualmatch = string.match(pattern); 1.3007 + expectedmatch = Array('aaa,b,c,d', 'c,'); 1.3008 + addThis(); 1.3009 + 1.3010 + status = inSection(404); 1.3011 + pattern = /^([^,]{1,3},){0,3}d/; 1.3012 + string = 'aaa,b,c,d'; 1.3013 + actualmatch = string.match(pattern); 1.3014 + expectedmatch = Array('aaa,b,c,d', 'c,'); 1.3015 + addThis(); 1.3016 + 1.3017 + status = inSection(405); 1.3018 + pattern = /^([^,]{1,},){3}d/; 1.3019 + string = 'aaa,b,c,d'; 1.3020 + actualmatch = string.match(pattern); 1.3021 + expectedmatch = Array('aaa,b,c,d', 'c,'); 1.3022 + addThis(); 1.3023 + 1.3024 + status = inSection(406); 1.3025 + pattern = /^([^,]{1,},){3,}d/; 1.3026 + string = 'aaa,b,c,d'; 1.3027 + actualmatch = string.match(pattern); 1.3028 + expectedmatch = Array('aaa,b,c,d', 'c,'); 1.3029 + addThis(); 1.3030 + 1.3031 + status = inSection(407); 1.3032 + pattern = /^([^,]{1,},){0,3}d/; 1.3033 + string = 'aaa,b,c,d'; 1.3034 + actualmatch = string.match(pattern); 1.3035 + expectedmatch = Array('aaa,b,c,d', 'c,'); 1.3036 + addThis(); 1.3037 + 1.3038 + status = inSection(408); 1.3039 + pattern = /^([^,]{0,3},){3}d/i; 1.3040 + string = 'aaa,b,c,d'; 1.3041 + actualmatch = string.match(pattern); 1.3042 + expectedmatch = Array('aaa,b,c,d', 'c,'); 1.3043 + addThis(); 1.3044 + 1.3045 + status = inSection(409); 1.3046 + pattern = /^([^,]{0,3},){3,}d/; 1.3047 + string = 'aaa,b,c,d'; 1.3048 + actualmatch = string.match(pattern); 1.3049 + expectedmatch = Array('aaa,b,c,d', 'c,'); 1.3050 + addThis(); 1.3051 + 1.3052 + status = inSection(410); 1.3053 + pattern = /^([^,]{0,3},){0,3}d/; 1.3054 + string = 'aaa,b,c,d'; 1.3055 + actualmatch = string.match(pattern); 1.3056 + expectedmatch = Array('aaa,b,c,d', 'c,'); 1.3057 + addThis(); 1.3058 + 1.3059 +/* ECMA doesn't support \A 1.3060 + status = inSection(411); 1.3061 + pattern = /(?!\A)x/m; 1.3062 + string = 'a\nxb\n'; 1.3063 + actualmatch = string.match(pattern); 1.3064 + expectedmatch = Array('\n'); 1.3065 + addThis(); 1.3066 +*/ 1.3067 + 1.3068 + status = inSection(412); 1.3069 + pattern = /^(a(b)?)+$/; 1.3070 + string = 'aba'; 1.3071 + actualmatch = string.match(pattern); 1.3072 + expectedmatch = Array('aba', 'a', undefined); 1.3073 + addThis(); 1.3074 + 1.3075 + status = inSection(413); 1.3076 + pattern = /^(aa(bb)?)+$/; 1.3077 + string = 'aabbaa'; 1.3078 + actualmatch = string.match(pattern); 1.3079 + expectedmatch = Array('aabbaa', 'aa', undefined); 1.3080 + addThis(); 1.3081 + 1.3082 + status = inSection(414); 1.3083 + pattern = /^.{9}abc.*\n/m; 1.3084 + string = '123\nabcabcabcabc\n'; 1.3085 + actualmatch = string.match(pattern); 1.3086 + expectedmatch = Array('abcabcabcabc\n'); 1.3087 + addThis(); 1.3088 + 1.3089 + status = inSection(415); 1.3090 + pattern = /^(a)?a$/; 1.3091 + string = 'a'; 1.3092 + actualmatch = string.match(pattern); 1.3093 + expectedmatch = Array('a', undefined); 1.3094 + addThis(); 1.3095 + 1.3096 + status = inSection(416); 1.3097 + pattern = /^(a\1?)(a\1?)(a\2?)(a\3?)$/; 1.3098 + string = 'aaaaaa'; 1.3099 + actualmatch = string.match(pattern); 1.3100 + expectedmatch = Array('aaaaaa', 'a', 'aa', 'a', 'aa'); 1.3101 + addThis(); 1.3102 + 1.3103 +/* Can't refer to a capture before it's encountered & completed 1.3104 + status = inSection(417); 1.3105 + pattern = /^(a\1?){4}$/; 1.3106 + string = 'aaaaaa'; 1.3107 + actualmatch = string.match(pattern); 1.3108 + expectedmatch = Array('aaaaaa', 'aaa'); 1.3109 + addThis(); 1.3110 +*/ 1.3111 + 1.3112 + status = inSection(418); 1.3113 + pattern = /^(0+)?(?:x(1))?/; 1.3114 + string = 'x1'; 1.3115 + actualmatch = string.match(pattern); 1.3116 + expectedmatch = Array('x1', undefined, '1'); 1.3117 + addThis(); 1.3118 + 1.3119 + status = inSection(419); 1.3120 + pattern = /^([0-9a-fA-F]+)(?:x([0-9a-fA-F]+)?)(?:x([0-9a-fA-F]+))?/; 1.3121 + string = '012cxx0190'; 1.3122 + actualmatch = string.match(pattern); 1.3123 + expectedmatch = Array('012cxx0190', '012c', undefined, '0190'); 1.3124 + addThis(); 1.3125 + 1.3126 + status = inSection(420); 1.3127 + pattern = /^(b+?|a){1,2}c/; 1.3128 + string = 'bbbac'; 1.3129 + actualmatch = string.match(pattern); 1.3130 + expectedmatch = Array('bbbac', 'a'); 1.3131 + addThis(); 1.3132 + 1.3133 + status = inSection(421); 1.3134 + pattern = /^(b+?|a){1,2}c/; 1.3135 + string = 'bbbbac'; 1.3136 + actualmatch = string.match(pattern); 1.3137 + expectedmatch = Array('bbbbac', 'a'); 1.3138 + addThis(); 1.3139 + 1.3140 + status = inSection(422); 1.3141 + pattern = /((?:aaaa|bbbb)cccc)?/; 1.3142 + string = 'aaaacccc'; 1.3143 + actualmatch = string.match(pattern); 1.3144 + expectedmatch = Array('aaaacccc', 'aaaacccc'); 1.3145 + addThis(); 1.3146 + 1.3147 + status = inSection(423); 1.3148 + pattern = /((?:aaaa|bbbb)cccc)?/; 1.3149 + string = 'bbbbcccc'; 1.3150 + actualmatch = string.match(pattern); 1.3151 + expectedmatch = Array('bbbbcccc', 'bbbbcccc'); 1.3152 + addThis(); 1.3153 + 1.3154 + 1.3155 + 1.3156 + 1.3157 +//----------------------------------------------------------------------------- 1.3158 + test(); 1.3159 +//----------------------------------------------------------------------------- 1.3160 + 1.3161 + 1.3162 + 1.3163 + function addThis() 1.3164 + { 1.3165 + if(omitCurrentSection()) 1.3166 + return; 1.3167 + 1.3168 + statusmessages[i] = status; 1.3169 + patterns[i] = pattern; 1.3170 + strings[i] = string; 1.3171 + actualmatches[i] = actualmatch; 1.3172 + expectedmatches[i] = expectedmatch; 1.3173 + i++; 1.3174 + } 1.3175 + 1.3176 + 1.3177 + function omitCurrentSection() 1.3178 + { 1.3179 + try 1.3180 + { 1.3181 + // current section number is in global status variable 1.3182 + var n = status.match(/(\d+)/)[1]; 1.3183 + return ((n < cnLBOUND) || (n > cnUBOUND)); 1.3184 + } 1.3185 + catch(e) 1.3186 + { 1.3187 + return false; 1.3188 + } 1.3189 + } 1.3190 + 1.3191 + 1.3192 + function test() 1.3193 + { 1.3194 + enterFunc ('test'); 1.3195 + printBugNumber(BUGNUMBER); 1.3196 + printStatus (summary); 1.3197 + testRegExp(statusmessages, patterns, strings, actualmatches, expectedmatches); 1.3198 + exitFunc ('test'); 1.3199 + }