about summary refs log tree commit diff
path: root/app/javascript/flavours/glitch/util/url_regex.js
blob: 9c2005c53d245a703b2f7110a2d70958928d9f14 (plain) (blame)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
import regexSupplant from 'twitter-text/dist/lib/regexSupplant';
import validUrlPrecedingChars from 'twitter-text/dist/regexp/validUrlPrecedingChars';
import validDomain from 'twitter-text/dist/regexp/validDomain';
import validPortNumber from 'twitter-text/dist/regexp/validPortNumber';
import validUrlPath from 'twitter-text/dist/regexp/validUrlPath';
import validUrlQueryChars from 'twitter-text/dist/regexp/validUrlQueryChars';
import validUrlQueryEndingChars from 'twitter-text/dist/regexp/validUrlQueryEndingChars';

// The difference with twitter-text's extractURL is that the protocol isn't
// optional.

export const urlRegex = regexSupplant(
  '('                                                          + // $1 URL
    '(#{validUrlPrecedingChars})'                              + // $2
    '(https?:\\/\\/)'                                          + // $3 Protocol
    '(#{validDomain})'                                         + // $4 Domain(s)
    '(?::(#{validPortNumber}))?'                               + // $5 Port number (optional)
    '(\\/#{validUrlPath}*)?'                                   + // $6 URL Path
    '(\\?#{validUrlQueryChars}*#{validUrlQueryEndingChars})?'  + // $7 Query String
  ')',
  {
    validUrlPrecedingChars,
    validDomain,
    validPortNumber,
    validUrlPath,
    validUrlQueryChars,
    validUrlQueryEndingChars,
  },
  'gi',
);