You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
 
 
 
 
 

118 lines
2.1 KiB

/*
* RegExp toString() has strict semantics, although the output is not
* uniquely defined. The specification only requires that the regexp
* can be compiled and will be semantically equivalent.
*
* Hence, e.g. /\n[a-c]/i.toString() might result in:
*
* 1. /\n[a-c]/i
* 2. /\n(?:a|b|c)/i
* 3. /\u000a[A-C]/i
*
* or one of many other alternatives. Here, though, the expected string
* is written to match what we -want- to see.
*
* Also note that output flag order is strictly specified.
*/
var r;
/*
* Test various regexp constructs and their escaping. Pattern
* syntax is defined in E5 Section 15.10.1.
*/
/*===
/(?:)/
/^$\b\B(?=foo)(?!bar)/
/a*b*?c+d+?e?f??/
/a{3}b{3}?c{3,}d{3,}?e{3,10}f{3,10}?/
/a.\0\cD\xde\u1234\u00de\=/
/[abc-d][^abc-d]/
/fOO/i
===*/
try {
r = new RegExp(''); /* empty regexp is a special case */
print(r.toString());
} catch (e) {
print(e.name);
}
try {
r = /^$\b\B(?=foo)(?!bar)/;
print(r.toString());
} catch (e) {
print(e.name);
}
try {
r = /a*b*?c+d+?e?f??/;
print(r.toString());
} catch (e) {
print(e.name);
}
try {
r = /a{3}b{3}?c{3,}d{3,}?e{3,10}f{3,10}?/;
print(r.toString());
} catch (e) {
print(e.name);
}
try {
/* '\cD' is a ControlLetter escape
*.
* \= is an IdentityEscape, whose and should match '='.
* Note that an IdentityEscape cannot be an IdentifierPart
* (e.g. 'z').
*/
r = /a.\0\cD\xde\u1234\u00de\=/;
print(r.toString());
} catch (e) {
print(e.name);
}
try {
/* FIXME: much to expand here */
r = /[abc-d][^abc-d]/;
print(r.toString());
} catch (e) {
print(e.name);
}
try {
/* case normalization would be allowed in pattern here */
r = /fOO/i;
print(r.toString());
} catch (e) {
print(e.name);
}
/*
* Flags
*/
/*===
/foo/g
/foo/i
/foo/m
/foo/gim
===*/
try {
r = /foo/g;
print(r.toString());
r = /foo/i;
print(r.toString());
r = /foo/m;
print(r.toString());
/* Note: input flag order differs from -required- output (E5 Section 15.10.6.4) */
r = /foo/mig;
print(r.toString());
} catch (e) {
print(e.name);
}