Links recognition library with FULL unicode support. Focused on high quality link patterns detection in plain text.
Why it's awesome:
npm install linkify-it --save
Browserification is also supported.
Usage examples Example 1import linkifyit from 'linkify-it';
const linkify = linkifyit();
linkify
.tlds(require('tlds'))
.tlds('onion', true)
.add('git:', 'http:')
.add('ftp:', null)
.set({ fuzzyIP: true });
console.log(linkify.test('Site github.com!'));
console.log(linkify.match('Site github.com!'));
Example 2. Add twitter mentions handler
linkify.add('@', {
validate: function (text, pos, self) {
const tail = text.slice(pos);
if (!self.re.twitter) {
self.re.twitter = new RegExp(
'^([a-zA-Z0-9_]){1,15}(?!_)(?=$|' + self.re.src_ZPCc + ')'
);
}
if (self.re.twitter.test(tail)) {
if (pos >= 2 && tail[pos - 2] === '@') {
return false;
}
return tail.match(self.re.twitter)[0].length;
}
return 0;
},
normalize: function (match) {
match.url = 'https://twitter.com/' + match.url.replace(/^@/, '');
}
});
API
new LinkifyIt(schemas, options)
Creates new linkifier instance with optional additional schemas. Can be called without new
keyword for convenience.
By default understands:
http(s)://...
, ftp://...
, mailto:...
& //...
linksschemas
is an object, where each key/value describes protocol/rule:
:
at the end, skype:
for example). linkify-it
makes sure that prefix is not preceded with alphanumeric char.RegExp
(start with ^
, and don't include the link prefix itself), or a validator function which, given arguments text, pos, and self, returns the length of a match in text starting at index pos. pos is the index right after the link prefix. self can be used to access the linkify object to cache data.options
:
http(s)://
head. Default true
.false
.mailto:
prefix. Default true
.true
to terminate link with ---
(if it's considered as long dash).Searches linkifiable pattern and returns true
on success or false
on fail.
Quick check if link MAY BE can exist. Can be used to optimize more expensive .test()
calls. Return false
if link can not be found, true
- if .test()
call needed to know exactly.
Similar to .test()
but checks only specific protocol tail exactly at given position. Returns length of found pattern (0 on fail).
Returns Array
of found link matches or null if nothing found.
Each match has:
//
for protocol-neutral links.Checks if a match exists at the start of the string. Returns Match
(see docs for match(text)
) or null if no URL is at the start. Doesn't work with fuzzy links.
Load (or merge) new tlds list. Those are needed for fuzzy links (without schema) to avoid false positives. By default:
xn--...
) root zones are ok.If that's not enough, you can reload defaults with more detailed zones list.
.add(key, value)Add a new schema to the schemas object. As described in the constructor definition, key
is a link prefix (skype:
, for example), and value
is a String to alias to another schema, or an Object with validate
and optionally normalize
definitions. To disable an existing rule, use .add(key, null)
.
Override default options. Missed properties will not be changed.
License LinkifyIt LinkifyIt.newOptional. Additional schemas to validate (prefix/validator)
{ fuzzyLink|fuzzyEmail|fuzzyIP: true|false }
Creates new linkifier instance with optional additional schemas. Can be called without new
keyword for convenience.
By default understands:
http(s)://...
, ftp://...
, mailto:...
& //...
linksschemas
is an object, where each key/value describes protocol/rule:
:
at the end, skype:
for example). linkify-it
makes shure that prefix is not preceeded with alphanumeric char and symbols. Only whitespaces and punctuation allowed.RegExp
.options
:
http(s):
prefix. Default true
.false
.mailto:
prefix.chainable
rule name (fixed pattern prefix)
schema definition
Add new rule definition. See constructor description for details.
LinkifyIt#matchReturns array of found link descriptions or null
on fail. We strongly recommend to use LinkifyIt#test first, for best speed.
//
for protocol-neutral links.Returns fully-formed (not fuzzy) link if it starts at the beginning of the string, and null otherwise.
LinkifyIt#normalizeDefault normalizer (if schema does not define it's own).
LinkifyIt#onCompileOverride to modify basic RegExp-s.
LinkifyIt#pretestVery quick check, that can give false positives. Returns true if link MAY BE can exists. Can be used for speed optimization, when you need to check that link NOT exists.
LinkifyIt#setchainable
{ fuzzyLink|fuzzyEmail|fuzzyIP: true|false }
Set recognition options for links without schema.
LinkifyIt#testSearches linkifiable pattern and returns true
on success or false
on fail.
text to scan
rule (schema) name
text offset to check from
Similar to LinkifyIt#test but checks only specific protocol tail exactly at given position. Returns length of found pattern (0 on fail).
LinkifyIt#tldschainable
list of tlds
merge with current list if true
(false
by default)
Load (or merge) new tlds list. Those are user for fuzzy links (without prefix) to avoid false positives. By default this algorythm used:
xn--...
) root zones are ok.If list is replaced, then exact match for 2-chars root zones will be checked.
Match DescriptionMatch result. Single element of array, returned by LinkifyIt#match
Match#indexFirst position of matched string.
Match#lastIndexNext position after matched string.
Match#rawMatched string.
Match#schemaPrefix (protocol) for matched string.
Match#textNotmalized text of matched string.
Match#urlNormalized url of matched string.
RetroSearch is an open source project built by @garambo | Open a GitHub Issue
Search and Browse the WWW like it's 1997 | Search results from DuckDuckGo
HTML:
3.2
| Encoding:
UTF-8
| Version:
0.7.4