You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
 
Luke Childs d0c0000854 1.3.0 9 years ago
src Support any valid scheme 9 years ago
test Support any valid scheme 9 years ago
.codeclimate.yml Disable line length check for markdown 9 years ago
.eslintignore Setup project 9 years ago
.eslintrc.json Setup project 9 years ago
.gitignore Remove .DS_Store and add to .gitignore 9 years ago
.npmignore Setup project 9 years ago
.travis.yml Change test coverage to coveralls 9 years ago
CHANGELOG.md 1.3.0 9 years ago
README.md Move code example to top of matches section 9 years ago
package.json 1.3.0 9 years ago

README.md

my-name-is-url Build Status Coverage Status Issue Count

Intelligently finds many different url formats in a string. For the browser and node.

About

In a nutshell, my-name-is-url is an intelligent parser that searches a string of text for urls. The url spec is so vague that many strings could be a url so matching the spec directly results in a lot of false positives. The regular expression used in my-name-is-url tries to match patterns likely to represent a url in a sentence rather than matching the actual url spec.

Important note

If you're trying to parse a url into sections (scheme,host) or check a url is valid this module isn't for you. This module is intended to find urls in a string.

Install

npm install --save my-name-is-url

or

jspm install npm:my-name-is-url

Matches

my-name-is-url doesn't choke on punctuation, these urls are successfully found regardless of the commas and period:

const text = 'Check out these sites: site1.com,site2.com,site3.com.';

Urls(text).get();
// ['site1.com', 'site2.com', 'site3.com']

many different url patterns are matched:

With http://                             -> http://url.com
With https://                            -> https://url.com
With //                                  -> //url.com
With no scheme                           -> url.com
With any valid gTLD                      -> url.website
With .local TLD                          -> url.local
With .dev TLD                            -> url.dev
With trailing slash                      -> url.com/
With port number                         -> url.com:8080
IP address                               -> 192.168.0.1
Localhost                                -> localhost
With slug                                -> url.com/slug
With hash                                -> url.com/#hash
With query string                        -> url.com/?foo
With query string with value             -> url.com/?foo=bar
With query string with multiple values   -> url.com/?foo=bar&hello=world
With complex query string                -> url.com/?foo[]=bar&foo[]=helloworld
With url encoded string                  -> url.com/Test+url+encoding+with+symbols+!%40£%24%25^%26*()_%2B

whilst excluding patterns you probably don't want:

Dot seperated string without a valid TLD -> url.notatld
Url with extra chars after a valid TLD   -> url.comextrachars
Url without dot                          -> urlcom
Url with semicolon but no port number    -> url.com:

Usage

Importing

CommonJS

var Urls = require('my-name-is-url');

ES6

import Urls from 'my-name-is-url';

Regex

If you just wanna do your own thing the regex used internally is helpfully exposed

const UrlRegex = Urls.regex;

Get Urls

The get() method returns an array of urls in a string

const text = 'Check out these sites: site1.com,site2.com,site3.com';

Urls(text).get();
// ['site1.com', 'site2.com', 'site3.com']

Filter Urls

The filter() method runs a filter on each url in a string

const text = 'My GitHub profile: https://github.com/lukechilds';

Urls(text).filter(url => `<a href="${url}">${url}</a>`);
// 'My GitHub profile: <a href="https://github.com/lukechilds">https://github.com/lukechilds</a>'

👍 Pro tip

You can get a parser instance by calling Urls() or new Urls, whichever you prefer.

License

MIT © Luke Childs