Chromium Code Reviews| Index: sdk/lib/_internal/lib/string_helper.dart |
| diff --git a/sdk/lib/_internal/lib/string_helper.dart b/sdk/lib/_internal/lib/string_helper.dart |
| index c134844a30c98dff720ac7b0f4920fde9688a661..7316f58d26faf8a5fc4a6f3300d3c576515b8ec4 100644 |
| --- a/sdk/lib/_internal/lib/string_helper.dart |
| +++ b/sdk/lib/_internal/lib/string_helper.dart |
| @@ -77,6 +77,14 @@ stringReplaceJS(receiver, replacer, to) { |
| return JS('String', r'#.replace(#, #)', receiver, replacer, to); |
| } |
| +stringReplaceJSRE(receiver, regexp, to, startIndex) { |
|
Lasse Reichstein Nielsen
2014/08/19 07:26:45
Name is nagging me.
How about
stringReplaceFirs
srawlins
2014/08/19 21:42:32
Good suggestion.
|
| + var match = regexp._execGlobal(receiver, startIndex); |
| + if (match == null) return receiver; |
| + var start = match.start; |
| + var end = match.end; |
| + return "${receiver.substring(0,start)}$to${receiver.substring(end)}"; |
| +} |
| + |
| const String ESCAPE_REGEXP = r'[[\]{}()*+?.\\^$|]'; |
| stringReplaceAllUnchecked(receiver, from, to) { |
| @@ -185,12 +193,16 @@ stringReplaceAllStringFuncUnchecked(receiver, pattern, onMatch, onNonMatch) { |
| } |
| -stringReplaceFirstUnchecked(receiver, from, to) { |
| +stringReplaceFirstUnchecked(receiver, from, to, [int startIndex = 0]) { |
| if (from is String) { |
| - return stringReplaceJS(receiver, from, to); |
| + //return stringReplaceJS(receiver, from, to, startIndex); |
|
Lasse Reichstein Nielsen
2014/08/19 07:26:45
Remove commented-out line.
srawlins
2014/08/19 21:42:32
Done.
|
| + var index = receiver.indexOf(from, startIndex); |
| + if (index < 0) return receiver; |
| + return receiver.substring(0, index) + to + receiver.substring(index + from.length); |
|
Lasse Reichstein Nielsen
2014/08/19 07:26:45
Might want to use a String-interpolation like in s
srawlins
2014/08/19 21:42:32
Done.
|
| } else if (from is JSSyntaxRegExp) { |
| var re = regExpGetNative(from); |
|
Lasse Reichstein Nielsen
2014/08/19 07:26:45
Inline the "re" value, so you don't compute it if
srawlins
2014/08/19 21:42:32
Done.
|
| - return stringReplaceJS(receiver, re, to); |
| + return startIndex == 0 ? stringReplaceJS(receiver, re, to) |
| + : stringReplaceJSRE(receiver, from, to, startIndex); |
| } else { |
| checkNull(from); |
| // TODO(floitsch): implement generic String.replace (with patterns). |