Index: pkg/string_scanner/lib/string_scanner.dart |
diff --git a/pkg/string_scanner/lib/string_scanner.dart b/pkg/string_scanner/lib/string_scanner.dart |
index 31ccd62664f82a3d9f3a3193917db70c13e0254f..3e3913b50169ba5796102c6314aba658341457b8 100644 |
--- a/pkg/string_scanner/lib/string_scanner.dart |
+++ b/pkg/string_scanner/lib/string_scanner.dart |
@@ -7,6 +7,11 @@ library string_scanner; |
import 'dart:math' as math; |
+/// When compiled to JS, forward slashes are always escaped in [RegExp.pattern]. |
+/// |
+/// See issue 17998. |
+final _slashAutoEscape = new RegExp("/").pattern == "\\/"; |
+ |
// TODO(nweiz): Add some integration between this and source maps. |
/// A class that scans through a string using [Pattern]s. |
class StringScanner { |
@@ -65,7 +70,9 @@ class StringScanner { |
if (name == null) { |
if (pattern is RegExp) { |
- name = "/${pattern.pattern.replaceAll("/", "\\/")}/"; |
+ var source = pattern.pattern; |
+ if (!_slashAutoEscape) source = source.replaceAll("/", "\\/"); |
+ name = "/$source/"; |
} else { |
name = pattern.toString() |
.replaceAll("\\", "\\\\").replaceAll('"', '\\"'); |