
Security News
The Changelog Podcast: Practical Steps to Stay Safe on npm
Learn the essential steps every developer should take to stay secure on npm and reduce exposure to supply chain attacks.
string-mismatch
Advanced tools
The library contain the next string comparison algorithms:
| Greedy | Levenshtein | Dice Coefficient | |
|---|---|---|---|
| Complexity | O(n*k) (k precision) | O(n^2) | O(nlog n) |
| Good | Fast algorithm | Always the optimal solution | Is based in probabilities and is a really fast algorithm |
| Bad | The solution is not the optimal | Complexity is O(n^2) | Impossible to see the differences between the strings |
| Use n^2 memory | |||
| Methods | difference | difference | distance |
| distance | distance | ||
| Operations for transform the string | insertion | insertion | not apply |
| deletion | deletion | ||
| substitution | |||
| Class name | Greedy | Levenshtein | DiceCoefficient |
Why use string-mismatch:
npm install --save string-mismatch
How to use the library and see the differences between two strings:
const sm = require("string-mismatch");
const greedyInstance = new sm.Greedy();
var start = 'This is a test for see how work the library',
end = 'This is a test for know how work the new library';
console.log(greedyInstance.differences(start, end));
The result is an object array with the mismatch result. Each object with the next structure:
{
type: string, // type of sub-string:
// 'sub' -> substitution
// 'ins' -> insertion
// 'del' -> deletion
// 'eql' -> equal
value: string // value of the current sub-string
}
The resulting string can be concatenated like the next example:
const sm = require("string-mismatch");
const greedyInstance = new sm.Greedy();
var start = 'This is a test for see how work the library',
end = 'This is a test for know how work the new library';
function showResult(diffs) {
return diffs.reduce(function (text, value) {
switch (value.type) {
case 'del':
return text + '(-' + value.value + ')';
case 'ins':
return text + '(+' + value.value + ')';
case 'sub':
return text + '(-+' + value.value + ')';
case 'eql':
return text + value.value;
}
}, '');
}
console.log(showResult(greedyInstance.differences(start, end)));
/*
result:
This is a test for (-see)(+know) how work the (+new )library
*/
This code can be tested in the project's examples. To run the examples use the next command:
npm start
Import the library
<!--Greedy algorithm-->
<script src="lib/greedy.min.js" type="application/javascript"></script>
<!--Levenshtein algorithm-->
<script src="lib/levenshtein.min.js" type="application/javascript"></script>
Example with greedy algorithm:
<script type="application/javascript">
var start = 'This is a test for see how work the library';
var end = 'This is a test for know how work the new library';
var alg = new Greedy(options);
var diffs = alg.differences(start, end);
console.log(diffs);
</script>
Example with the levenshtein algorithm:
<script type="application/javascript">
var start = 'This is a test for see how work the library';
var end = 'This is a test for know how work the new library';
var alg = new Levenshtein(options);
var diffs = alg.differences(start, end);
console.log(diffs);
</script>
npm test
All contributions are welcome.
We use SemVer for versioning. For the versions available, see the tags on this repository.
This project is licensed under the MIT License - see the LICENSE.md file for details
FAQs
All mismatch between two strings
We found that string-mismatch demonstrated a not healthy version release cadence and project activity because the last version was released a year ago. It has 1 open source maintainer collaborating on the project.
Did you know?

Socket for GitHub automatically highlights issues in each pull request and monitors the health of all your open source dependencies. Discover the contents of your packages and block harmful activity before you install or update your dependencies.

Security News
Learn the essential steps every developer should take to stay secure on npm and reduce exposure to supply chain attacks.

Security News
Experts push back on new claims about AI-driven ransomware, warning that hype and sponsored research are distorting how the threat is understood.

Security News
Ruby's creator Matz assumes control of RubyGems and Bundler repositories while former maintainers agree to step back and transfer all rights to end the dispute.