1// Copyright JS Foundation and other contributors, http://js.foundation 2// 3// Licensed under the Apache License, Version 2.0 (the "License"); 4// you may not use this file except in compliance with the License. 5// You may obtain a copy of the License at 6// 7// http://www.apache.org/licenses/LICENSE-2.0 8// 9// Unless required by applicable law or agreed to in writing, software 10// distributed under the License is distributed on an "AS IS" BASIS 11// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 12// See the License for the specific language governing permissions and 13// limitations under the License. 14 15var r; 16 17// Simple test cases 18r = new RegExp ("()"); 19assert (r.exec ("a") == ","); 20 21r = new RegExp ("(a)"); 22assert (r.exec ("a") == "a,a"); 23 24r = new RegExp ("((a)b)c"); 25assert (r.exec ("abc") == "abc,ab,a"); 26 27r = new RegExp ("(a)*"); 28assert (r.exec ("b")[0] == ""); 29assert (r.exec ("b")[1] == undefined); 30assert (r.exec ("aaaa") == "aaaa,a"); 31 32r = new RegExp ("(a)+"); 33assert (r.exec ("aaaa") == "aaaa,a"); 34 35r = new RegExp ("(a){4}"); 36assert (r.exec ("aaaa") == "aaaa,a"); 37 38r = new RegExp ("(a){1,2}"); 39assert (r.exec ("a") == "a,a"); 40assert (r.exec ("aa") == "aa,a"); 41assert (r.exec ("aaaa") == "aa,a"); 42 43r = new RegExp ("(a)?"); 44assert (r.exec ("a") == "a,a"); 45assert (r.exec ("b")[0] == ""); 46assert (r.exec ("b")[1] == undefined); 47 48// Test greedy iterations 49r = new RegExp ("(a){1,3}a"); 50assert (r.exec("aa") == "aa,a"); 51 52r = new RegExp ("(a){1,3}a"); 53assert (r.exec("aaa") == "aaa,a"); 54 55r = new RegExp ("(a){1,3}"); 56assert (r.exec("a") == "a,a"); 57 58r = new RegExp ("(a){1,3}"); 59assert (r.exec("aaa") == "aaa,a"); 60 61r = new RegExp ("(a){1,3}"); 62assert (r.exec("aaaa") == "aaa,a"); 63 64r = new RegExp ("(a){1,5}"); 65assert (r.exec("aaaa") == "aaaa,a"); 66 67r = new RegExp ("(a|b){1,2}"); 68assert (r.exec("a") == "a,a"); 69 70r = new RegExp ("(a|b){1,3}a"); 71assert (r.exec("aaa") == "aaa,a"); 72 73r = new RegExp ("(a|b){1,3}a"); 74assert (r.exec("aba") == "aba,b"); 75 76r = new RegExp ("(a|b){1,3}a"); 77assert (r.exec("b") == undefined); 78 79r = new RegExp ("(a|b){1,3}a"); 80assert (r.exec("bbb") == undefined); 81 82r = new RegExp ("(a|b){1,3}"); 83assert (r.exec("a") == "a,a"); 84 85r = new RegExp ("(a|b){1,3}"); 86assert (r.exec("aa") == "aa,a"); 87 88r = new RegExp ("(a|b){1,3}"); 89assert (r.exec("aaa") == "aaa,a"); 90 91r = new RegExp ("(a|b){1,3}"); 92assert (r.exec("ab") == "ab,b"); 93 94r = new RegExp ("(a|b){1,3}"); 95assert (r.exec("aba") == "aba,a"); 96 97r = new RegExp ("(a|b){1,3}"); 98assert (r.exec("bab") == "bab,b"); 99 100r = new RegExp ("(a|b){1,3}"); 101assert (r.exec("bbb") == "bbb,b"); 102 103r = new RegExp ("(a|b){1,4}a"); 104assert (r.exec("bbb") == undefined); 105 106r = new RegExp ("(a|b){1,4}"); 107assert (r.exec("ab") == "ab,b"); 108 109r = new RegExp ("(a|b){1,4}"); 110assert (r.exec("aba") == "aba,a"); 111 112r = new RegExp ("(a|b){1,4}"); 113assert (r.exec("bbb") == "bbb,b"); 114 115r = new RegExp ("(a|b){1,5}"); 116assert (r.exec("aba") == "aba,a"); 117 118r = new RegExp ("(a|b){1,5}"); 119assert (r.exec("abab") == "abab,b"); 120 121r = new RegExp ("(a|b){1,5}"); 122assert (r.exec("bbb") == "bbb,b"); 123 124r = new RegExp ("(aba)*"); 125assert (r.exec("aaaa") == ","); 126 127r = new RegExp ("(aba)+"); 128assert (r.exec("aaaa") == undefined); 129 130r = new RegExp ("(a|bb|c|d)"); 131assert (r.exec("a") == "a,a"); 132 133r = new RegExp ("(a|b)"); 134assert (r.exec("a") == "a,a"); 135 136r = new RegExp ("(a|b)+"); 137assert (r.exec("aba") == "aba,a"); 138 139r = new RegExp ("(a|b)"); 140assert (r.exec("b") == "b,b"); 141 142r = new RegExp ("(a)"); 143assert (r.exec("a") == "a,a"); 144 145r = new RegExp ("(a)*"); 146assert (r.exec("a") == "a,a"); 147 148r = new RegExp ("(a)*"); 149assert (r.exec("aaaa") == "aaaa,a"); 150 151r = new RegExp ("(a)+"); 152assert (r.exec("aaaa") == "aaaa,a"); 153 154r = new RegExp ("(a|aa){0,3}b"); 155assert (r.exec("aaaaaab") == "aaaaaab,aa"); 156 157r = new RegExp ("((a){2,3}){4}b"); 158assert (r.exec("aaaaaaaab") == "aaaaaaaab,aa,a"); 159 160// Test non-greedy iterations 161r = new RegExp ("(a)+?"); 162assert (r.exec("aaaa") == "a,a"); 163 164r = new RegExp ("(a)*?aa"); 165assert (r.exec("aaaa") == "aa,"); 166 167r = new RegExp ("(aaa|aa)*?aa"); 168assert (r.exec("aaaa")[0] == "aa"); 169assert (r.exec("aaaa")[1] == undefined); 170 171r = new RegExp ("(a)??aa"); 172assert (r.exec("aaaa")[0] == "aa"); 173assert (r.exec("aaaa")[1] == undefined); 174 175r = new RegExp ("(a)?aa"); 176assert (r.exec("aaaa") == "aaa,a"); 177 178r = new RegExp ("(()*?)*?a"); 179assert (r.exec("ba")[0] == "a"); 180assert (r.exec("ba")[1] == undefined); 181assert (r.exec("ba")[2] == undefined); 182 183r = new RegExp ("((bb?)*)*a"); 184assert (r.exec("bbba") == "bbba,bbb,b"); 185 186r = new RegExp ("((bb?)*)*bbb\\Ba"); 187assert (r.exec("bbba")[0] == "bbba"); 188assert (r.exec("bbba")[1] == undefined); 189assert (r.exec("bbba")[2] == undefined); 190 191r = new RegExp ("(a??){0,1}a"); 192assert (r.exec("aa") == "aa,a"); 193 194r = new RegExp ("(a?){0,1}a"); 195assert (r.exec("aa") == "aa,a"); 196 197r = new RegExp ("(a{0,1}?){0,1}a"); 198assert (r.exec("aa") == "aa,a"); 199 200r = new RegExp ("(|.)+"); 201assert (JSON.stringify (r.exec("asdfgh")) === '["asdfgh","h"]'); 202 203assert (JSON.stringify (/([^\W](){8,}?){5}/.exec("asdfghijk")) === '["asdfg","g",""]'); 204assert (JSON.stringify (/(()+?(.+)|){3,}./u.exec("asdfghi")) === '["asdfghi","",null,null]') 205assert (JSON.stringify (/(()+?(.+)|){3,}?./u.exec("asdfghi")) === '["asdfghi","",null,null]') 206assert (JSON.stringify (/(?:()+?(.+)|){3,}./u.exec("asdfghi")) === '["asdfghi",null,null]') 207assert (JSON.stringify (/(?:()+?(.+)|){3,}?./u.exec("asdfghi")) === '["asdfghi",null,null]') 208