Ecosyste.ms: Awesome
An open API service indexing awesome lists of open source software.
https://github.com/amogil/url_regex
Provides the best regex for validating or extracting URLs
https://github.com/amogil/url_regex
extract-urls parsing regexes ruby ruby-gem rubygem
Last synced: about 1 month ago
JSON representation
Provides the best regex for validating or extracting URLs
- Host: GitHub
- URL: https://github.com/amogil/url_regex
- Owner: amogil
- License: mit
- Created: 2016-07-16T21:10:00.000Z (over 8 years ago)
- Default Branch: master
- Last Pushed: 2021-04-09T11:34:28.000Z (over 3 years ago)
- Last Synced: 2024-04-21T02:08:05.905Z (7 months ago)
- Topics: extract-urls, parsing, regexes, ruby, ruby-gem, rubygem
- Language: Ruby
- Homepage:
- Size: 31.3 KB
- Stars: 10
- Watchers: 2
- Forks: 4
- Open Issues: 1
-
Metadata Files:
- Readme: README.md
- License: LICENSE.txt
Awesome Lists containing this project
README
[![Build Status](https://travis-ci.org/amogil/url_regex.svg?branch=master)](https://travis-ci.org/amogil/url_regex)
[![Code Climate](https://codeclimate.com/github/amogil/url_regex/badges/gpa.svg)](https://codeclimate.com/github/amogil/url_regex)
[![Gem Version](https://badge.fury.io/rb/url_regex.svg)](https://badge.fury.io/rb/url_regex)# UrlRegex
Provides the best known regex for validating and extracting URLs.
It builds on amazing work done by [Diego Perini](https://gist.github.com/dperini/729294)
and [Mathias Bynens](https://mathiasbynens.be/demo/url-regex).Why do we need a gem for this regex?
- You don't need to follow changes and improvements of original regex.
- You can slightly customize the regex: a scheme can be optional, and you can get the regex for validation or parsing.## Installation
Add this line to your application's Gemfile:
gem 'url_regex'
And then execute:
$ bundle
Or install it yourself as:
$ gem install url_regex
## Usage
Get the regex:
UrlRegex.get(options)
where options are:
- `scheme_required` indicates that schema is required, defaults to `true`.
- `mode` can gets either `:validation`, `:parsing` or `:javascript`, defaults to `:validation`.
`:validation` asks to return the regex for validation, namely, with `\A` prefix, and with `\z` postfix.
That means, it matches whole text:UrlRegex.get(mode: :validation).match('https://www.google.com').nil?
# => false
UrlRegex.get(mode: :validation).match('link: https://www.google.com').nil?
# => true`:parsing` asks to return the regex for parsing:
str = 'links: google.com https://google.com?t=1'
str.scan(UrlRegex.get(mode: :parsing))
# => ["https://google.com?t=1"]# schema is not required
str.scan(UrlRegex.get(scheme_required: false, mode: :parsing))
# => ["google.com", "https://google.com?t=1"]`:javascript` asks to return the regex formatted for use in Javascript files or as `pattern` attribute values on HTML inputs. For this purpose, you'd use the `source` method on the Regexp object instance in order to produce a string that Javascript will understand. These examples make use of the Rails `text_field` method to generate HTML input elements.
regex = UrlRegex.get(mode: :javascript)
text_field(:site, :url, pattern: regex.source)
# =>regex = UrlRegex.get(scheme_required: false, mode: :javascript)
text_field(:site, :url, pattern: regex.source)
# =>`UrlRegex.get` returns regular Ruby's [Regex](http://ruby-doc.org/core-2.0.0/Regexp.html) object,
so you can use it as usual.All regexes are case-insensitive.
## FAQ
Q: Hey, I want to parse HTML, but it doesn't work:
str = 'Link'
str.scan(UrlRegex.get(mode: :parsing))
# => "http://google.com?t=1">Link"A: Well, you probably know that parsing HTML with regex is
[a bad idea](https://stackoverflow.com/questions/1732348/regex-match-open-tags-except-xhtml-self-contained-tags).
It requires matching corresponding open and close brackets, that makes the regex even more complicated.Q: How can I speed up processing?
A: Generated regex depends only on options, so you can get the regex only once and cache it.
## Contributing
1. Fork it ( https://github.com/[my-github-username]/url_regex/fork )
2. Create your feature branch (`git checkout -b my-new-feature`)
3. Commit your changes (`git commit -am 'Add some feature'`)
4. Push to the branch (`git push origin my-new-feature`)
5. Create a new Pull Request