Spaces:
Running
Running
didYouMean.js - A simple JavaScript matching engine | |
=================================================== | |
[Available on GitHub](https://github.com/dcporter/didyoumean.js). | |
A super-simple, highly optimized JS library for matching human-quality input to a list of potential | |
matches. You can use it to suggest a misspelled command-line utility option to a user, or to offer | |
links to nearby valid URLs on your 404 page. (The examples below are taken from a personal project, | |
my [HTML5 business card](http://dcporter.aws.af.cm/me), which uses didYouMean.js to suggest correct | |
URLs from misspelled ones, such as [dcporter.aws.af.cm/me/instagarm](http://dcporter.aws.af.cm/me/instagarm).) | |
Uses the [Levenshtein distance algorithm](https://en.wikipedia.org/wiki/Levenshtein_distance). | |
didYouMean.js works in the browser as well as in node.js. To install it for use in node: | |
``` | |
npm install didyoumean | |
``` | |
Examples | |
-------- | |
Matching against a list of strings: | |
``` | |
var input = 'insargrm' | |
var list = ['facebook', 'twitter', 'instagram', 'linkedin']; | |
console.log(didYouMean(input, list)); | |
> 'instagram' | |
// The method matches 'insargrm' to 'instagram'. | |
input = 'google plus'; | |
console.log(didYouMean(input, list)); | |
> null | |
// The method was unable to find 'google plus' in the list of options. | |
``` | |
Matching against a list of objects: | |
``` | |
var input = 'insargrm'; | |
var list = [ { id: 'facebook' }, { id: 'twitter' }, { id: 'instagram' }, { id: 'linkedin' } ]; | |
var key = 'id'; | |
console.log(didYouMean(input, list, key)); | |
> 'instagram' | |
// The method returns the matching value. | |
didYouMean.returnWinningObject = true; | |
console.log(didYouMean(input, list, key)); | |
> { id: 'instagram' } | |
// The method returns the matching object. | |
``` | |
didYouMean(str, list, [key]) | |
---------------------------- | |
- str: The string input to match. | |
- list: An array of strings or objects to match against. | |
- key (OPTIONAL): If your list array contains objects, you must specify the key which contains the string | |
to match against. | |
Returns: the closest matching string, or null if no strings exceed the threshold. | |
Options | |
------- | |
Options are set on the didYouMean function object. You may change them at any time. | |
### threshold | |
By default, the method will only return strings whose edit distance is less than 40% (0.4x) of their length. | |
For example, if a ten-letter string is five edits away from its nearest match, the method will return null. | |
You can control this by setting the "threshold" value on the didYouMean function. For example, to set the | |
edit distance threshold to 50% of the input string's length: | |
``` | |
didYouMean.threshold = 0.5; | |
``` | |
To return the nearest match no matter the threshold, set this value to null. | |
### thresholdAbsolute | |
This option behaves the same as threshold, but instead takes an integer number of edit steps. For example, | |
if thresholdAbsolute is set to 20 (the default), then the method will only return strings whose edit distance | |
is less than 20. Both options apply. | |
### caseSensitive | |
By default, the method will perform case-insensitive comparisons. If you wish to force case sensitivity, set | |
the "caseSensitive" value to true: | |
``` | |
didYouMean.caseSensitive = true; | |
``` | |
### nullResultValue | |
By default, the method will return null if there is no sufficiently close match. You can change this value here. | |
### returnWinningObject | |
By default, the method will return the winning string value (if any). If your list contains objects rather | |
than strings, you may set returnWinningObject to true. | |
``` | |
didYouMean.returnWinningObject = true; | |
``` | |
This option has no effect on lists of strings. | |
### returnFirstMatch | |
By default, the method will search all values and return the closest match. If you're simply looking for a "good- | |
enough" match, you can set your thresholds appropriately and set returnFirstMatch to true to substantially speed | |
things up. | |
License | |
------- | |
didYouMean copyright (c) 2013-2014 Dave Porter. | |
Licensed under the Apache License, Version 2.0 (the "License"); | |
you may not use this file except in compliance with the License. | |
You may obtain a copy of the License | |
[here](http://www.apache.org/licenses/LICENSE-2.0). | |
Unless required by applicable law or agreed to in writing, software | |
distributed under the License is distributed on an "AS IS" BASIS, | |
WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. | |
See the License for the specific language governing permissions and | |
limitations under the License. | |