diff --git a/src/mfm/parse/elements/emoji.ts b/src/mfm/parse/elements/emoji.ts
index cd9a3d032c..e510b5d912 100644
--- a/src/mfm/parse/elements/emoji.ts
+++ b/src/mfm/parse/elements/emoji.ts
@@ -9,7 +9,7 @@ export type TextElementEmoji = {
 };
 
 export default function(text: string) {
-	const match = text.match(/^:([a-zA-Z0-9+-_]+):/);
+	const match = text.match(/^:([a-zA-Z0-9+-_]+?):/);
 	if (!match) return null;
 	const emoji = match[0];
 	return {
diff --git a/test/mfm.ts b/test/mfm.ts
index f5e5223f29..1aadcd21e8 100644
--- a/test/mfm.ts
+++ b/test/mfm.ts
@@ -180,10 +180,17 @@ describe('Text', () => {
 		});
 
 		it('emoji', () => {
-			const tokens = analyze(':cat:');
+			const tokens1 = analyze(':cat:');
 			assert.deepEqual([
 				{ type: 'emoji', content: ':cat:', emoji: 'cat'}
-			], tokens);
+			], tokens1);
+
+			const tokens2 = analyze(':cat::cat::cat:');
+			assert.deepEqual([
+				{ type: 'emoji', content: ':cat:', emoji: 'cat'},
+				{ type: 'emoji', content: ':cat:', emoji: 'cat'},
+				{ type: 'emoji', content: ':cat:', emoji: 'cat'}
+			], tokens2);
 		});
 
 		it('block code', () => {