/* * RegExp instance properties. * * RegExp instance 'source' property must behave as specified in E5 Section * 15.10.4.1 paragraphcs 5 and 6. Note: there is no one required form of source. * Tests are for the source form that we want. */ /* * FIXME: when does '\' in source need to be escaped? */ /* * FIXME: add property attribute checks */ function getflags(r) { var res = '' if (r.global) { res += 'g'; } if (r.ignoreCase) { res += 'i'; } if (r.multiline) { res += 'm'; } return res; } /* * Empty string */ /*=== (?:) ===*/ try { t = new RegExp(''); print(t.source); t = eval('/' + t.source + '/' + getflags(t)); t = t.exec(''); print(t[0]); } catch (e) { print(e.name); } /* * Forward slash */ /*=== \/ / ===*/ try { t = new RegExp('/'); /* matches one forward slash (only) */ print(t.source); t = eval('/' + t.source + '/' + getflags(t)); t = t.exec('/'); print(t[0]); } catch (e) { print(e.name); } /* * Backslash */ /*=== \d 9 ===*/ try { t = new RegExp('\\d'); /* matches a digit */ print(t.source); t = eval('/' + t.source + '/' + getflags(t)); t = t.exec('9'); print(t[0]); } catch (e) { print(e.name); } /* * Flags */ /*=== foo false true false foo false true false Foo foo true false false foo true false false foo false false true foo false false true ===*/ try { t = new RegExp('foo', 'i'); print(t.source, t.global, t.ignoreCase, t.multiline); t = eval('/' + t.source + '/' + getflags(t)); print(t.source, t.global, t.ignoreCase, t.multiline); t = t.exec('Foo'); print(t[0]); } catch (e) { print(e.name); } try { t = new RegExp('foo', 'g'); print(t.source, t.global, t.ignoreCase, t.multiline); t = eval('/' + t.source + '/' + getflags(t)); print(t.source, t.global, t.ignoreCase, t.multiline); } catch (e) { print(e.name); } try { t = new RegExp('foo', 'm'); print(t.source, t.global, t.ignoreCase, t.multiline); t = eval('/' + t.source + '/' + getflags(t)); print(t.source, t.global, t.ignoreCase, t.multiline); } catch (e) { print(e.name); } /* * lastIndex */ /*=== 0 ===*/ try { t = new RegExp('foo', 'i'); print(t.lastIndex); } catch (e) { print(e.name); }