diff --git a/src/mfm/parser.ts b/src/mfm/parser.ts index 50877bcdb5c6c40ad3ebe4ff9f38dc28d621bc08..2f1608832ebc4532e29a2dd2fd39a7e200ae5d45 100644 --- a/src/mfm/parser.ts +++ b/src/mfm/parser.ts @@ -205,7 +205,7 @@ const mfm = P.createLanguage({ hashtag: r => P((input, i) => { const text = input.substr(i); - const match = text.match(/^#([^\s\.,!\?#:]+)/i); + const match = text.match(/^#([^\s\.,!\?"#:]+)/i); if (!match) return P.makeFailure(i, 'not a hashtag'); let hashtag = match[1]; hashtag = removeOrphanedBrackets(hashtag); diff --git a/test/mfm.ts b/test/mfm.ts index 7e2de47339099a75c79750e724300c869bf300b8..60fd4d62f8b3358aa8d623cf4bee3e7d521f18a2 100644 --- a/test/mfm.ts +++ b/test/mfm.ts @@ -365,6 +365,14 @@ describe('MFM', () => { ]); }); + it('ignore double quote', () => { + const tokens = analyze('#foo"'); + assert.deepStrictEqual(tokens, [ + leaf('hashtag', { hashtag: 'foo' }), + text('"'), + ]); + }); + it('allow including number', () => { const tokens = analyze('#foo123'); assert.deepStrictEqual(tokens, [