diff --git a/mode/soy/soy.js b/mode/soy/soy.js
index 79bfc24dfd6cd98c8b9930bea210cfbfb6ac4812..580c306f15f9ea18dbda3f7698f6798357e2953f 100644
--- a/mode/soy/soy.js
+++ b/mode/soy/soy.js
@@ -121,10 +121,11 @@
             return tokenUntil(stream, state, /\{\/literal}/);
 
           case "string":
-            if (stream.match(/^.*?"/)) {
-              state.soyState.pop();
-            } else {
+            var match = stream.match(/^.*?("|\\[\s\S])/);
+            if (!match) {
               stream.skipToEnd();
+            } else if (match[1] == "\"") {
+              state.soyState.pop();
             }
             return "string";
         }