From 9ce4d1194e8f96edfc0c8a66c75f038ae96bd9c1 Mon Sep 17 00:00:00 2001 From: Antasel Date: Thu, 17 Aug 2023 19:35:15 +0600 Subject: [PATCH] lint, test cases of _ prefixed email inside italic --- __tests__/ExpensiMark-HTML-test.js | 4 ++++ lib/ExpensiMark.js | 18 ++++++++++-------- 2 files changed, 14 insertions(+), 8 deletions(-) diff --git a/__tests__/ExpensiMark-HTML-test.js b/__tests__/ExpensiMark-HTML-test.js index 0362f3d33..3e50499e0 100644 --- a/__tests__/ExpensiMark-HTML-test.js +++ b/__tests__/ExpensiMark-HTML-test.js @@ -175,11 +175,15 @@ test('Test emails within other markdown', () => { + '```test@example.com```\n' + '`test@example.com`\n' + '_test@example.com_ ' + + '_test@example.com__ ' + + '__test@example.com__ ' + '__test@example.com_'; const result = '
test@example.com
' + '
test@example.com
' + 'test@example.com
' + 'test@example.com ' + + 'test@example.com_ ' + + '_test@example.com_ ' + '_test@example.com'; expect(parser.replace(testString)).toBe(result); }); diff --git a/lib/ExpensiMark.js b/lib/ExpensiMark.js index 1363974ed..7f5a3483e 100644 --- a/lib/ExpensiMark.js +++ b/lib/ExpensiMark.js @@ -158,13 +158,15 @@ export default class ExpensiMark { regex: /(\b_+|\b)(?!_blank")_((?![\s_])[\s\S]*?[^\s_])_(?![^\W_])(?![^<]*(<\/pre>|<\/code>|<\/a>|<\/mention-user>|_blank))/g, // We want to add extraLeadingUnderscores back before the tag unless textWithinUnderscores starts with valid email - replacement: (match, extraLeadingUnderscores, textWithinUnderscores) => ( - textWithinUnderscores.includes('
') || this.containsNonPairTag(textWithinUnderscores)
-                        ? match
-                        : Boolean(String(textWithinUnderscores).match(`^${CONST.REG_EXP.MARKDOWN_EMAIL}`))
-                        ? `${extraLeadingUnderscores}${textWithinUnderscores}`
-                        : `${extraLeadingUnderscores}${textWithinUnderscores}`
-                ),
+                replacement: (match, extraLeadingUnderscores, textWithinUnderscores) => {
+                    if (textWithinUnderscores.includes('
') || this.containsNonPairTag(textWithinUnderscores)) {
+                        return match;
+                    }
+                    if (String(textWithinUnderscores).match(`^${CONST.REG_EXP.MARKDOWN_EMAIL}`)) {
+                        return `${extraLeadingUnderscores}${textWithinUnderscores}`;
+                    }
+                    return `${extraLeadingUnderscores}${textWithinUnderscores}`;
+                },
             },
 
             /**
@@ -175,7 +177,7 @@ export default class ExpensiMark {
             {
                 name: 'autoEmail',
                 regex: new RegExp(
-                    `(?![^<]*>|[^<>]*<\\/(?!em))(?:(?<= |[^\\w'#%+-])|^|\\b)${CONST.REG_EXP.MARKDOWN_EMAIL}(?!((?:(?!|[^<]*(<\/pre>|<\/code>))`,
+                    `(?![^<]*>|[^<>]*<\\/(?!em))(?:(?<= |[^\\w'#%+-])|^|\\b)${CONST.REG_EXP.MARKDOWN_EMAIL}(?!((?:(?!|[^<]*(<\\/pre>|<\\/code>))`,
                     'gim',
                 ),
                 replacement: '$1',