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 15assert (JSON.stringify (/(?:(a)*){3,}/.exec("aaaab")) === '["aaaa",null]'); 16assert (JSON.stringify (/((a)*){3,}/.exec("aaaab")) === '["aaaa","",null]'); 17assert (JSON.stringify (/((a)+){3,}/.exec("aaaab")) === '["aaaa","a","a"]'); 18assert (JSON.stringify (/((.)*){3,}/.exec("abcd")) === '["abcd","",null]'); 19assert (JSON.stringify (/((.)+){3,}/.exec("abcd")) === '["abcd","d","d"]'); 20 21assert (JSON.stringify (/((.){1,2}){1,2}/.exec("abc")) === '["abc","c","c"]'); 22assert (JSON.stringify (/(?:(a)*?)asd/.exec("aaasd")) === '["aaasd","a"]'); 23assert (JSON.stringify (/(?:(a)*)asd/.exec("aaasd")) === '["aaasd","a"]'); 24 25assert (JSON.stringify (/(.)*((a)*|(b)*)/.exec("ab")) === '["ab","b","",null,null]'); 26assert (JSON.stringify (/(.)*((x)|(y))+/.exec("xy")) === '["xy","x","y",null,"y"]'); 27assert (JSON.stringify (/(.)*((y)|(x))+/.exec("xy")) === '["xy","x","y","y",null]'); 28 29assert (JSON.stringify (/((?:a)*)/.exec("aaaad")) === '["aaaa","aaaa"]'); 30assert (JSON.stringify (/((y)+|x)+/.exec("x")) === '["x","x",null]'); 31assert (JSON.stringify (/((?:y)*|x)+/.exec("x")) === '["x","x"]'); 32assert (JSON.stringify (/((y)*|x)+/.exec("x")) === '["x","x",null]'); 33assert (JSON.stringify (/((y)*|x)*/.exec("x")) === '["x","x",null]'); 34assert (JSON.stringify (/(?:(y)*|x)*/.exec("x")) === '["x",null]'); 35assert (JSON.stringify (/(?:(y)*|(x))*/.exec("x")) === '["x",null,"x"]'); 36 37assert (JSON.stringify (/((?:a)*)asd/.exec("aaasd")) === '["aaasd","aa"]'); 38assert (JSON.stringify (/((?:a)+)asd/.exec("aaasd")) === '["aaasd","aa"]'); 39assert (JSON.stringify (/((?:a)*?)asd/.exec("aaasd")) === '["aaasd","aa"]'); 40assert (JSON.stringify (/((?:a)+?)asd/.exec("aaasd")) === '["aaasd","aa"]'); 41 42assert (JSON.stringify (/((y)|(z)|(a))*/.exec("yazx")) === '["yaz","z",null,"z",null]'); 43assert (JSON.stringify (/((y)|(z)|(.))*/.exec("yaz")) === '["yaz","z",null,"z",null]'); 44assert (JSON.stringify (/((y)*|(z)*|(a)*)*/.exec("yazx")) === '["yaz","z",null,"z",null]') 45assert (JSON.stringify (/((y)|(z)|(a))*/.exec("yazx")) === '["yaz","z",null,"z",null]') 46assert (JSON.stringify (/(?:(y)|(z)|(a))*/.exec("yazx")) === '["yaz",null,"z",null]') 47assert (JSON.stringify (/((y)|(z)|(a))+?/.exec("yazx")) === '["y","y","y",null,null]') 48assert (JSON.stringify (/(?:(y)|(z)|(a))+?/.exec("yazx")) === '["y","y",null,null]') 49 50assert (JSON.stringify (/(?:(x|y)*|z)*/.exec("yz")) === '["yz",null]'); 51assert (JSON.stringify (/((x|y)*|z)*/.exec("yz")) == '["yz","z",null]'); 52assert (JSON.stringify (/(((x|y)*|(v|w)*|z)*)asd/.exec("xyzwvxzasd")) === '["xyzwvxzasd","xyzwvxz","z",null,null]'); 53 54assert (JSON.stringify (/((a)*){1,3}b/.exec("ab")) === '["ab","a","a"]') 55assert (JSON.stringify (/((a)*){2,3}b/.exec("ab")) === '["ab","",null]') 56assert (JSON.stringify (/((a)*){3,3}b/.exec("ab")) === '["ab","",null]') 57 58assert (JSON.stringify (/((a)*){3,}b/.exec("aaaab")) === '["aaaab","",null]'); 59assert (JSON.stringify (/((a)*)*b/.exec("aaaab")) === '["aaaab","aaaa","a"]'); 60 61assert (JSON.stringify (/((bb?)*)*a/.exec("bbba")) === '["bbba","bbb","b"]'); 62assert (JSON.stringify (/((b)*)*a/.exec("bbba")) === '["bbba","bbb","b"]'); 63 64assert (JSON.stringify (/(aa|a)a/.exec("aa")) === '["aa","a"]'); 65assert (JSON.stringify (/(aa|a)?a/.exec("aa")) === '["aa","a"]'); 66assert (JSON.stringify (/(aa|a)+?a/.exec("aa")) === '["aa","a"]'); 67assert (JSON.stringify (/(?:aa|a)a/.exec("aa")) === '["aa"]'); 68assert (JSON.stringify (/(?:aa|a)?a/.exec("aa")) === '["aa"]'); 69assert (JSON.stringify (/(?:aa|a)+?a/.exec("aa")) === '["aa"]'); 70 71assert (JSON.stringify (/(aa|a)a/.exec("a")) === 'null'); 72assert (JSON.stringify (/(aa|a)?a/.exec("a")) === '["a",null]'); 73assert (JSON.stringify (/(aa|a)+?a/.exec("a")) === 'null'); 74assert (JSON.stringify (/(?:aa|a)a/.exec("a")) === 'null'); 75assert (JSON.stringify (/(?:aa|a)?a/.exec("a")) === '["a"]'); 76assert (JSON.stringify (/(?:aa|a)+?a/.exec("a")) === 'null'); 77 78assert (JSON.stringify (/a+/.exec("aaasd")) === '["aaa"]'); 79assert (JSON.stringify (/a+?/.exec("aaasd")) === '["a"]'); 80 81assert (JSON.stringify (/a+sd/.exec("aaasd")) === '["aaasd"]'); 82assert (JSON.stringify (/a+?sd/.exec("aaasd")) === '["aaasd"]'); 83 84assert (JSON.stringify (/a{2}sd/.exec("aaasd")) === '["aasd"]'); 85assert (JSON.stringify (/a{3}sd/.exec("aaasd")) === '["aaasd"]'); 86 87assert (JSON.stringify (/(?=a)/.exec("a")) === '[""]'); 88assert (JSON.stringify (/(?=a)+/.exec("a")) === '[""]'); 89assert (JSON.stringify (/(?=a)*/.exec("a")) === '[""]'); 90assert (JSON.stringify (/(?=(a))?/.exec("a")) === '["",null]'); 91assert (JSON.stringify (/(?=(a))+?/.exec("a")) === '["","a"]'); 92assert (JSON.stringify (/(?=(a))*?/.exec("a")) === '["",null]'); 93 94assert (JSON.stringify (/(?!a)/.exec("a")) === '[""]'); 95assert (JSON.stringify (/(?!a)+/.exec("a")) === '[""]'); 96assert (JSON.stringify (/(?!a)*/.exec("a")) === '[""]'); 97assert (JSON.stringify (/(?!(a))?/.exec("a")) === '["",null]'); 98assert (JSON.stringify (/(?!(a))+?/.exec("a")) === '["",null]'); 99assert (JSON.stringify (/(?!(a))*?/.exec("a")) === '["",null]'); 100 101assert (JSON.stringify (/al(?=(ma))*ma/.exec("alma")) === '["alma",null]'); 102assert (JSON.stringify (/al(?!(ma))*ma/.exec("alma")) === '["alma",null]'); 103assert (JSON.stringify (/al(?=(ma))+ma/.exec("alma")) === '["alma","ma"]'); 104assert (JSON.stringify (/al(?!(ma))+ma/.exec("alma")) === 'null'); 105 106assert (JSON.stringify (/(?=())x|/.exec("asd")) === '["",null]'); 107assert (JSON.stringify (/(?!())x|/.exec("asd")) === '["",null]'); 108 109assert (JSON.stringify (/(().*)+.$/.exec("abcdefg")) === '["abcdefg","abcdef",""]'); 110assert (JSON.stringify (/(().*)+?.$/.exec("abcdefg")) === '["abcdefg","abcdef",""]'); 111assert (JSON.stringify (/(?:().*)+.$/.exec("abcdefg")) === '["abcdefg",""]'); 112assert (JSON.stringify (/(?:().*)+?.$/.exec("abcdefg")) === '["abcdefg",""]'); 113 114assert (JSON.stringify(/((?=())|.)+^/.exec("a")) === '["","",""]'); 115assert (JSON.stringify(/(?:(|\b\w+?){2})+$/.exec("aaaa")) === '["aaaa","aaaa"]'); 116