Skip to content

markdown-it/linkify-it

Repository files navigation

linkify-it

CI NPM version Coverage Status

Links recognition library with FULL unicode support. Focused on high quality link patterns detection in plain text.

Demo

Why it's awesome:

  • Full unicode support, with astral characters!
  • International domains support.
  • Allows rules extension & custom normalizers.

Install

npm install linkify-it --save

Usage examples

import { LinkifyIt } from 'linkify-it';
const linkify = new LinkifyIt({ fuzzyLink: true });

linkify
  .tlds(require('tlds'))
  .tlds('onion', true)
  .add('ftp:', null)
  .set({ fuzzyIP: true });

console.log(linkify.test('Site github.com!'));
// true

console.log(linkify.match('Site github.com!'));
// [ {
//   schema: "",
//   index: 5,
//   lastIndex: 15,
//   raw: "github.com",
//   text: "github.com",
//   url: "http://github.com",
// } ]

See more in examples folder:

API

API documentation

new LinkifyIt(options)

Creates new linkifier instance.

By default understands:

  • http(s)://... , ftp://..., mailto:... & //... links
  • "fuzzy" emails (foo@bar.com).

options:

  • fuzzyLink - recognize URL-s without http(s):// head. Default false.
  • fuzzyIP - allow IPs in fuzzy links above. Can conflict with some texts like version numbers. Default false.
  • fuzzyEmail - recognize emails without mailto: prefix. Default true.
  • tlds - allowed TLDs list for fuzzy links. Replaces the default list when set.
  • --- - set true to terminate link with --- (if it's considered as long dash). Default false.
  • rebuilder - custom REBuilder instance for patched regex fragments.
  • urlAuth - recognize authentication data in URLs. Default false.
  • maxLength - maximum link length. Default 10000.

.test(text)

Searches linkifiable pattern and returns true on success or false on fail.

.testSchemaAt(text, name, offset)

Similar to .test() but checks only specific protocol tail exactly at given position. Returns length of found pattern (0 on fail).

.match(text)

Returns Array of found link matches or null if nothing found.

Each match has:

  • schema - link schema, can be empty for fuzzy links, or // for protocol-neutral links.
  • index - offset of matched text
  • lastIndex - index of next char after mathch end
  • raw - matched text
  • text - normalized text
  • url - link, generated from matched text

.matchAtStart(text)

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.

.tlds(list[, keepOld])

Load (or merge) new tlds list. Those are needed for fuzzy links (without schema) to avoid false positives. By default:

  • 2-letter root zones are ok.
  • biz|com|edu|gov|net|org|pro|web|xxx|aero|asia|coop|info|museum|name|shop|рф are ok.
  • encoded (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.

key is a link prefix (usually, protocol name with : at the end, skype: for example). linkify-it makes sure that prefix is not preceded with alphanumeric char.

value is a rule to check tail after link prefix:

  • Object
    • validate - 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.
    • normalize - optional function to normalize text & url of matched result (for example, for twitter mentions).

To disable an existing rule, use .add(key, null).

.set(options)

Override default options. Missed properties will not be changed.

About

Links recognition library with full unicode support

Resources

License

Security policy

Stars

725 stars

Watchers

8 watching

Forks

Sponsor this project

  •  
  •  

Contributors