1425bb815Sopenharmony_ci// Copyright JS Foundation and other contributors, http://js.foundation
2425bb815Sopenharmony_ci//
3425bb815Sopenharmony_ci// Licensed under the Apache License, Version 2.0 (the "License");
4425bb815Sopenharmony_ci// you may not use this file except in compliance with the License.
5425bb815Sopenharmony_ci// You may obtain a copy of the License at
6425bb815Sopenharmony_ci//
7425bb815Sopenharmony_ci//     http://www.apache.org/licenses/LICENSE-2.0
8425bb815Sopenharmony_ci//
9425bb815Sopenharmony_ci// Unless required by applicable law or agreed to in writing, software
10425bb815Sopenharmony_ci// distributed under the License is distributed on an "AS IS" BASIS
11425bb815Sopenharmony_ci// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
12425bb815Sopenharmony_ci// See the License for the specific language governing permissions and
13425bb815Sopenharmony_ci// limitations under the License.
14425bb815Sopenharmony_ci
15425bb815Sopenharmony_ciassert (JSON.stringify (/(?:(a)*){3,}/.exec("aaaab")) === '["aaaa",null]');
16425bb815Sopenharmony_ciassert (JSON.stringify (/((a)*){3,}/.exec("aaaab")) === '["aaaa","",null]');
17425bb815Sopenharmony_ciassert (JSON.stringify (/((a)+){3,}/.exec("aaaab")) === '["aaaa","a","a"]');
18425bb815Sopenharmony_ciassert (JSON.stringify (/((.)*){3,}/.exec("abcd")) === '["abcd","",null]');
19425bb815Sopenharmony_ciassert (JSON.stringify (/((.)+){3,}/.exec("abcd")) === '["abcd","d","d"]');
20425bb815Sopenharmony_ci
21425bb815Sopenharmony_ciassert (JSON.stringify (/((.){1,2}){1,2}/.exec("abc")) === '["abc","c","c"]');
22425bb815Sopenharmony_ciassert (JSON.stringify (/(?:(a)*?)asd/.exec("aaasd")) === '["aaasd","a"]');
23425bb815Sopenharmony_ciassert (JSON.stringify (/(?:(a)*)asd/.exec("aaasd")) === '["aaasd","a"]');
24425bb815Sopenharmony_ci
25425bb815Sopenharmony_ciassert (JSON.stringify (/(.)*((a)*|(b)*)/.exec("ab")) === '["ab","b","",null,null]');
26425bb815Sopenharmony_ciassert (JSON.stringify (/(.)*((x)|(y))+/.exec("xy")) === '["xy","x","y",null,"y"]');
27425bb815Sopenharmony_ciassert (JSON.stringify (/(.)*((y)|(x))+/.exec("xy")) === '["xy","x","y","y",null]');
28425bb815Sopenharmony_ci
29425bb815Sopenharmony_ciassert (JSON.stringify (/((?:a)*)/.exec("aaaad")) === '["aaaa","aaaa"]');
30425bb815Sopenharmony_ciassert (JSON.stringify (/((y)+|x)+/.exec("x")) === '["x","x",null]');
31425bb815Sopenharmony_ciassert (JSON.stringify (/((?:y)*|x)+/.exec("x")) === '["x","x"]');
32425bb815Sopenharmony_ciassert (JSON.stringify (/((y)*|x)+/.exec("x")) === '["x","x",null]');
33425bb815Sopenharmony_ciassert (JSON.stringify (/((y)*|x)*/.exec("x")) === '["x","x",null]');
34425bb815Sopenharmony_ciassert (JSON.stringify (/(?:(y)*|x)*/.exec("x")) === '["x",null]');
35425bb815Sopenharmony_ciassert (JSON.stringify (/(?:(y)*|(x))*/.exec("x")) === '["x",null,"x"]');
36425bb815Sopenharmony_ci
37425bb815Sopenharmony_ciassert (JSON.stringify (/((?:a)*)asd/.exec("aaasd")) === '["aaasd","aa"]');
38425bb815Sopenharmony_ciassert (JSON.stringify (/((?:a)+)asd/.exec("aaasd")) === '["aaasd","aa"]');
39425bb815Sopenharmony_ciassert (JSON.stringify (/((?:a)*?)asd/.exec("aaasd")) === '["aaasd","aa"]');
40425bb815Sopenharmony_ciassert (JSON.stringify (/((?:a)+?)asd/.exec("aaasd")) === '["aaasd","aa"]');
41425bb815Sopenharmony_ci
42425bb815Sopenharmony_ciassert (JSON.stringify (/((y)|(z)|(a))*/.exec("yazx")) === '["yaz","z",null,"z",null]');
43425bb815Sopenharmony_ciassert (JSON.stringify (/((y)|(z)|(.))*/.exec("yaz")) === '["yaz","z",null,"z",null]');
44425bb815Sopenharmony_ciassert (JSON.stringify (/((y)*|(z)*|(a)*)*/.exec("yazx")) === '["yaz","z",null,"z",null]')
45425bb815Sopenharmony_ciassert (JSON.stringify (/((y)|(z)|(a))*/.exec("yazx")) === '["yaz","z",null,"z",null]')
46425bb815Sopenharmony_ciassert (JSON.stringify (/(?:(y)|(z)|(a))*/.exec("yazx")) === '["yaz",null,"z",null]')
47425bb815Sopenharmony_ciassert (JSON.stringify (/((y)|(z)|(a))+?/.exec("yazx")) === '["y","y","y",null,null]')
48425bb815Sopenharmony_ciassert (JSON.stringify (/(?:(y)|(z)|(a))+?/.exec("yazx")) === '["y","y",null,null]')
49425bb815Sopenharmony_ci
50425bb815Sopenharmony_ciassert (JSON.stringify (/(?:(x|y)*|z)*/.exec("yz")) === '["yz",null]');
51425bb815Sopenharmony_ciassert (JSON.stringify (/((x|y)*|z)*/.exec("yz")) == '["yz","z",null]');
52425bb815Sopenharmony_ciassert (JSON.stringify (/(((x|y)*|(v|w)*|z)*)asd/.exec("xyzwvxzasd")) === '["xyzwvxzasd","xyzwvxz","z",null,null]');
53425bb815Sopenharmony_ci
54425bb815Sopenharmony_ciassert (JSON.stringify (/((a)*){1,3}b/.exec("ab")) === '["ab","a","a"]')
55425bb815Sopenharmony_ciassert (JSON.stringify (/((a)*){2,3}b/.exec("ab")) === '["ab","",null]')
56425bb815Sopenharmony_ciassert (JSON.stringify (/((a)*){3,3}b/.exec("ab")) === '["ab","",null]')
57425bb815Sopenharmony_ci
58425bb815Sopenharmony_ciassert (JSON.stringify (/((a)*){3,}b/.exec("aaaab")) === '["aaaab","",null]');
59425bb815Sopenharmony_ciassert (JSON.stringify (/((a)*)*b/.exec("aaaab")) === '["aaaab","aaaa","a"]');
60425bb815Sopenharmony_ci
61425bb815Sopenharmony_ciassert (JSON.stringify (/((bb?)*)*a/.exec("bbba")) === '["bbba","bbb","b"]');
62425bb815Sopenharmony_ciassert (JSON.stringify (/((b)*)*a/.exec("bbba")) === '["bbba","bbb","b"]');
63425bb815Sopenharmony_ci
64425bb815Sopenharmony_ciassert (JSON.stringify (/(aa|a)a/.exec("aa")) === '["aa","a"]');
65425bb815Sopenharmony_ciassert (JSON.stringify (/(aa|a)?a/.exec("aa")) === '["aa","a"]');
66425bb815Sopenharmony_ciassert (JSON.stringify (/(aa|a)+?a/.exec("aa")) === '["aa","a"]');
67425bb815Sopenharmony_ciassert (JSON.stringify (/(?:aa|a)a/.exec("aa")) === '["aa"]');
68425bb815Sopenharmony_ciassert (JSON.stringify (/(?:aa|a)?a/.exec("aa")) === '["aa"]');
69425bb815Sopenharmony_ciassert (JSON.stringify (/(?:aa|a)+?a/.exec("aa")) === '["aa"]');
70425bb815Sopenharmony_ci
71425bb815Sopenharmony_ciassert (JSON.stringify (/(aa|a)a/.exec("a")) === 'null');
72425bb815Sopenharmony_ciassert (JSON.stringify (/(aa|a)?a/.exec("a")) === '["a",null]');
73425bb815Sopenharmony_ciassert (JSON.stringify (/(aa|a)+?a/.exec("a")) === 'null');
74425bb815Sopenharmony_ciassert (JSON.stringify (/(?:aa|a)a/.exec("a")) === 'null');
75425bb815Sopenharmony_ciassert (JSON.stringify (/(?:aa|a)?a/.exec("a")) === '["a"]');
76425bb815Sopenharmony_ciassert (JSON.stringify (/(?:aa|a)+?a/.exec("a")) === 'null');
77425bb815Sopenharmony_ci
78425bb815Sopenharmony_ciassert (JSON.stringify (/a+/.exec("aaasd")) === '["aaa"]');
79425bb815Sopenharmony_ciassert (JSON.stringify (/a+?/.exec("aaasd")) === '["a"]');
80425bb815Sopenharmony_ci
81425bb815Sopenharmony_ciassert (JSON.stringify (/a+sd/.exec("aaasd")) === '["aaasd"]');
82425bb815Sopenharmony_ciassert (JSON.stringify (/a+?sd/.exec("aaasd")) === '["aaasd"]');
83425bb815Sopenharmony_ci
84425bb815Sopenharmony_ciassert (JSON.stringify (/a{2}sd/.exec("aaasd")) === '["aasd"]');
85425bb815Sopenharmony_ciassert (JSON.stringify (/a{3}sd/.exec("aaasd")) === '["aaasd"]');
86425bb815Sopenharmony_ci
87425bb815Sopenharmony_ciassert (JSON.stringify (/(?=a)/.exec("a")) === '[""]');
88425bb815Sopenharmony_ciassert (JSON.stringify (/(?=a)+/.exec("a")) === '[""]');
89425bb815Sopenharmony_ciassert (JSON.stringify (/(?=a)*/.exec("a")) === '[""]');
90425bb815Sopenharmony_ciassert (JSON.stringify (/(?=(a))?/.exec("a")) === '["",null]');
91425bb815Sopenharmony_ciassert (JSON.stringify (/(?=(a))+?/.exec("a")) === '["","a"]');
92425bb815Sopenharmony_ciassert (JSON.stringify (/(?=(a))*?/.exec("a")) === '["",null]');
93425bb815Sopenharmony_ci
94425bb815Sopenharmony_ciassert (JSON.stringify (/(?!a)/.exec("a")) === '[""]');
95425bb815Sopenharmony_ciassert (JSON.stringify (/(?!a)+/.exec("a")) === '[""]');
96425bb815Sopenharmony_ciassert (JSON.stringify (/(?!a)*/.exec("a")) === '[""]');
97425bb815Sopenharmony_ciassert (JSON.stringify (/(?!(a))?/.exec("a")) === '["",null]');
98425bb815Sopenharmony_ciassert (JSON.stringify (/(?!(a))+?/.exec("a")) === '["",null]');
99425bb815Sopenharmony_ciassert (JSON.stringify (/(?!(a))*?/.exec("a")) === '["",null]');
100425bb815Sopenharmony_ci
101425bb815Sopenharmony_ciassert (JSON.stringify (/al(?=(ma))*ma/.exec("alma")) === '["alma",null]');
102425bb815Sopenharmony_ciassert (JSON.stringify (/al(?!(ma))*ma/.exec("alma")) === '["alma",null]');
103425bb815Sopenharmony_ciassert (JSON.stringify (/al(?=(ma))+ma/.exec("alma")) === '["alma","ma"]');
104425bb815Sopenharmony_ciassert (JSON.stringify (/al(?!(ma))+ma/.exec("alma")) === 'null');
105425bb815Sopenharmony_ci
106425bb815Sopenharmony_ciassert (JSON.stringify (/(?=())x|/.exec("asd")) === '["",null]');
107425bb815Sopenharmony_ciassert (JSON.stringify (/(?!())x|/.exec("asd")) === '["",null]');
108425bb815Sopenharmony_ci
109425bb815Sopenharmony_ciassert (JSON.stringify (/(().*)+.$/.exec("abcdefg")) === '["abcdefg","abcdef",""]');
110425bb815Sopenharmony_ciassert (JSON.stringify (/(().*)+?.$/.exec("abcdefg")) === '["abcdefg","abcdef",""]');
111425bb815Sopenharmony_ciassert (JSON.stringify (/(?:().*)+.$/.exec("abcdefg")) === '["abcdefg",""]');
112425bb815Sopenharmony_ciassert (JSON.stringify (/(?:().*)+?.$/.exec("abcdefg")) === '["abcdefg",""]');
113425bb815Sopenharmony_ci
114425bb815Sopenharmony_ciassert (JSON.stringify(/((?=())|.)+^/.exec("a")) === '["","",""]');
115425bb815Sopenharmony_ciassert (JSON.stringify(/(?:(|\b\w+?){2})+$/.exec("aaaa")) === '["aaaa","aaaa"]');
116