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