regexp.js (1436B)
1 function toLatin1(s) { 2 assertEq(isLatin1(s), true); 3 return s; 4 } 5 6 // Latin1 7 var re = new RegExp(toLatin1("foo[bB]a\\r"), toLatin1("im")); 8 assertEq(isLatin1(re.source), true); 9 assertEq(re.source, "foo[bB]a\\r"); 10 assertEq(re.multiline, true); 11 assertEq(re.ignoreCase, true); 12 assertEq(re.sticky, false); 13 14 // TwoByte 15 re = new RegExp("foo[bB]a\\r\u1200", "im"); 16 assertEq(isLatin1(re.source), false); 17 assertEq(re.source, "foo[bB]a\\r\u1200"); 18 assertEq(re.multiline, true); 19 assertEq(re.ignoreCase, true); 20 assertEq(re.sticky, false); 21 22 re = /b[aA]r/; 23 24 // Latin1 25 assertEq(toLatin1("foobAr1234").search(re), 3); 26 assertEq(toLatin1("bar1234").search(re), 0); 27 assertEq(toLatin1("foobbr1234").search(re), -1); 28 29 // TwoByte 30 assertEq("foobAr1234\u1200".search(re), 3); 31 assertEq("bar1234\u1200".search(re), 0); 32 assertEq("foobbr1234\u1200".search(re), -1); 33 34 re = /abcdefghijklm[0-5]/; 35 assertEq(toLatin1("1abcdefghijklm4").search(re), 1); 36 assertEq("\u12001abcdefghijklm0".search(re), 2); 37 assertEq(toLatin1("1abcdefghijklm8").search(re), -1); 38 assertEq("\u12001abcdefghijklm8".search(re), -1); 39 40 // If the input is Latin1, case-independent matches should work 41 // correctly for characters outside Latin1 with Latin1 equivalents. 42 var s = toLatin1("foobar\xff5baz"); 43 assertEq(s.search(/bar\u0178\d/i), 3); 44 45 // Bug 1032067. 46 ''.match(eval("/(:[aaaaa\cC]\u1200)(?:\S|(?=(\3)))+?/y")); 47 assertEq(Function("return /(\uB0DA()})/.toString();")(), "/(\uB0DA()})/");