diff --git a/src/services/completions.ts b/src/services/completions.ts
index 1adfc1e480f37..9cad080c46121 100644
--- a/src/services/completions.ts
+++ b/src/services/completions.ts
@@ -49,7 +49,9 @@ namespace ts.Completions {
const compilerOptions = program.getCompilerOptions();
const contextToken = findPrecedingToken(position, sourceFile);
- if (triggerCharacter && !isValidTrigger(sourceFile, triggerCharacter, contextToken, position)) return undefined;
+ if (triggerCharacter && !isInString(sourceFile, position, contextToken) && !isValidTrigger(sourceFile, triggerCharacter, contextToken, position)) {
+ return undefined;
+ }
const stringCompletions = StringCompletions.getStringLiteralCompletions(sourceFile, position, contextToken, typeChecker, compilerOptions, host, log, preferences);
if (stringCompletions) {
diff --git a/tests/cases/fourslash/completionsStringsWithTriggerCharacter.ts b/tests/cases/fourslash/completionsStringsWithTriggerCharacter.ts
new file mode 100644
index 0000000000000..277218305f4a1
--- /dev/null
+++ b/tests/cases/fourslash/completionsStringsWithTriggerCharacter.ts
@@ -0,0 +1,30 @@
+///
+
+//// type A = "a/b" | "b/a";
+//// const a: A = "a/*1*/";
+////
+//// type B = "a@b" | "b@a";
+//// const a: B = "a@/*2*/";
+////
+//// type C = "a.b" | "b.a";
+//// const c: C = "a./*3*/";
+////
+//// type D = "a'b" | "b'a";
+//// const d: D = "a'/*4*/";
+////
+//// type E = "a`b" | "b`a";
+//// const e: E = "a`/*5*/";
+////
+//// type F = 'a"b' | 'b"a';
+//// const f: F = 'a"/*6*/';
+////
+//// type G = "a