diff --git a/src/rules/link.js b/src/rules/link.js
index 696d1e0..d3c5caa 100644
--- a/src/rules/link.js
+++ b/src/rules/link.js
@@ -1,12 +1,18 @@
-const LINK_REGEX = /\[(.+?)\]\(((?:(?:http[s]?|ftp):\/{2})?)([\w\/\-+?#=.:;!%&]+)\)/g
+const LINK_REGEX =
+ /\[(.+?)\]\(((?:(?:http[s]?|ftp):\/{2})?)([\w\/\-+?#=.:;!%&]+)\)/g
export class Link {
- static get RULE_NAME () { return 'link' }
+ static get RULE_NAME () {
+ return 'link'
+ }
static parse (source) {
- return source.replace(LINK_REGEX, (match, linkName, urlProtocolDomain, urlPath) => {
- const url = urlProtocolDomain.trim() + urlPath.trim().replace(/:/g, '%3A')
-
- return `${linkName}`
- })
+ return source.replace(
+ LINK_REGEX,
+ (match, linkName, urlProtocolDomain, urlPath) => {
+ const url =
+ urlProtocolDomain.trim() + urlPath.trim().replace(/:/g, '%3A')
+ return `${linkName}`
+ }
+ )
}
}
diff --git a/src/rules/linkify.js b/src/rules/linkify.js
index 1686db6..f22d0c5 100644
--- a/src/rules/linkify.js
+++ b/src/rules/linkify.js
@@ -1,13 +1,18 @@
-const LINK_REGEX = /(^|\s|>)((?:http(?:s)?:\/\/.)(?:www\.)?[-a-zA-Z0-9@:%._\+~#=]{2,256}\.[a-z]{2,6})\b([-a-zA-Z0-9@:;%_\+.~#?!&//=]*)/g
+const LINK_REGEX =
+ /(^|\s|>)((?:http(?:s)?:\/\/.)(?:www\.)?[-a-zA-Z0-9@:%._\+~#=]{2,256}\.[a-z]{2,6})\b([-a-zA-Z0-9@:;%_\+.~#?!&//=]*)/g;
export class Linkify {
- static get RULE_NAME () { return 'linkify' }
-
- static parse (source) {
- return source.replace(LINK_REGEX, (all, before, urlProtocolDomain, urlPath) => {
- const url = urlProtocolDomain.trim() + urlPath.trim().replace(/:/g, '%3A')
- const href = url.substr(0, 4) !== 'http' ? `http://${url}` : url
+ static get RULE_NAME() {
+ return "linkify";
+ }
- return `${before}${url}`
- })
+ static parse(source) {
+ return source.replace(
+ LINK_REGEX,
+ (all, before, urlProtocolDomain, urlPath) => {
+ const url = new URL(source);
+ url.pathname = url.pathname.replace(/:/g, "%3A");
+ return `${before}${url.href}`;
+ }
+ );
}
}