diff options
Diffstat (limited to 'src')
| -rw-r--r-- | src/common-util/wiki-data.js | 17 |
1 files changed, 15 insertions, 2 deletions
diff --git a/src/common-util/wiki-data.js b/src/common-util/wiki-data.js index 4c7f66f4..4bae0125 100644 --- a/src/common-util/wiki-data.js +++ b/src/common-util/wiki-data.js @@ -1,6 +1,6 @@ // Utility functions for interacting with wiki data. -import {accumulateSum, chunkByConditions, empty, unique} from './sugar.js'; +import {accumulateSum, chunkByConditions, empty, re, unique} from './sugar.js'; import {sortByDate} from './sort.js'; // This is a duplicate binding of filterMultipleArrays that's included purely @@ -593,7 +593,20 @@ export function* matchMarkdownLinks(markdownSource, {marked}) { } export function* matchInlineLinks(source) { - const plausibleLinkRegexp = /\b[a-z]*:\/\/[^ ]*?(?=(?:[,.!?]*)(?:\s|$))/gm; + const plausibleLinkRegexp = re('gmi')` + ${/\b[a-z]*:\/\//} + ${/.*?/} + + (?=${[ + // Ordinary in-sentence punctuation doesn't terminate the + // un-greedy URL match above, but it shouldn't be counted + // as part of the link either, if it's at the end. + /(?:[,.!?]*)/, + + // Actual terminators. + /(?:\s|$|<br>)/, + ]}) + `; let plausibleMatch = null; while (plausibleMatch = plausibleLinkRegexp.exec(source)) { |