Заменить [A-Za-z]{3,9}:(?:\/\/)?
на https?:\/\/
. И поскольку вы не используете переменные для построения регулярного выражения, используйте литерал регулярного выражения, а не нотацию конструктора.
/\bhttps?:\/\/(?:(?:[-;:&=+$,\w]+@)?[A-Za-z0-9.-]+|(?:www\.|[-;:&=+$,\w]+@)[A-Za-z0-9.-]+)(?:\/[+~%\/.\w_-]*\??(?:[-+=&;%@.\w_]*)#?[.!\/\\\w]*)?/g
См. демонстрацию онлайн-регулярного выражения
\bhttps?:\/\/
, соответствующее https://
или http://
как целому слову, будет применяться к обеим альтернативам в (?:(?:[-;:&=+$,\w]+@)?[A-Za-z0-9.-]+|(?:www\.|[-;:&=+$,\w]+@)[A-Za-z0-9.-]+)
, (?:[-;:&=+$,\w]+@)?[A-Za-z0-9.-]+
и (?:www\.|[-;:&=+$,\w]+@)[A-Za-z0-9.-]+
, что требует протокола до www.
.
Есть также много избыточных групп захвата, рассмотрите возможность удаления ненужных и преобразования в не захватившие те, которые вам нужны для количественной оценки.
let text = "https://example.com http://example.com/more?k=v ftp://not.this.one www.example www.example.com";
let rx = /\bhttps?:\/\/(?:(?:[-;:&=+$,\w]+@)?[A-Za-z0-9.-]+|(?:www\.|[-;:&=+$,\w]+@)[A-Za-z0-9.-]+)(?:\/[+~%\/.\w_-]*\??(?:[-+=&;%@.\w_]*)#?[.!\/\\\w]*)?/g;
let replaced = text.replace(rx,'<a href="$&" target="_blank">$&</a>');
console.log(replaced);
Обратная ссылка $&
относится ко всему значению соответствия регулярному выражению, нет необходимости переносить весь шаблон с дополнительной парой захватывающих скобок.