Index: src/string.js |
=================================================================== |
--- src/string.js (revision 3239) |
+++ src/string.js (working copy) |
@@ -380,12 +380,19 @@ |
// Unfortunately, that means this code is nearly duplicated, here and in |
// jsregexp.cc. |
if (regexp.global) { |
+ var numberOfCaptures = NUMBER_OF_CAPTURES(matchInfo) >> 1; |
var previous = 0; |
do { |
- result.addSpecialSlice(previous, matchInfo[CAPTURE0]); |
var startOfMatch = matchInfo[CAPTURE0]; |
+ result.addSpecialSlice(previous, startOfMatch); |
previous = matchInfo[CAPTURE1]; |
- result.add(ApplyReplacementFunction(replace, matchInfo, subject)); |
+ if (numberOfCaptures == 1) { |
+ var match = SubString(subject, startOfMatch, previous); |
+ // Don't call directly to avoid exposing the built-in global object. |
+ result.add(replace.call(null, match, startOfMatch, subject)); |
+ } else { |
+ result.add(ApplyReplacementFunction(replace, matchInfo, subject)); |
+ } |
// Can't use matchInfo any more from here, since the function could |
// overwrite it. |
// Continue with the next match. |