A really small, performant, zero-dependency, unicode-aware library for working with Strings in Node.js.
Javascript has a serious problem with unicode. Even ES6 can’t solve the problem entirely since some characters like the new colored emojis are three bytes instead of two bytes. Sometimes even more! "👍🏽".length returns 4 which is totally wrong (hint: it should be 1!). ES6's Array.from tried to solve this, but that even fails: Array.from("👍🏽") returns ["👍", "🏽"] which is incorrect. This library tries to tackle all these problems with a mega RegExp. Read More Here.
🎈 Based on a RegExp copied from the Lodash library.
- Limit string to width (truncate/pad)
- Unicode-aware string length
- Unicode-aware substring
- Unicode-aware substr
- Performant
$ npm install stringz --saveAnd import it in your awesome node app:
// ES2015+import*asstringzfrom'stringz';// OR:import{limit,substring,length,substr}from'stringz';// CommonJSvarstringz=require('stringz');// use like: stringz.limit ...function limit(str[, limit[, padStr[, padPosition]]]) | Param | Type | Default | Description |
|---|---|---|---|
| str | String | none | The string to be limited |
| limit | Number | 16 | Desired string length |
| padStr | String | "#" | Character to pad the output with |
| padPosition | String | "right" | Pad position: "right" or "left" |
// Truncate:limit("Life’s like a box of chocolates.",20);// "Life's like a box of"// Pad:limit("Make emojis great again",26,"💩");// "Make emojis great again💩💩💩"limit("What are you looking at?",30,"+","left");// "++++++What are you looking at?"// Unicode Aware:limit("🤔🤔🤔",2);// "🤔🤔"limit("👍🏽👍🏽",4,"👍🏽");// "👍🏽👍🏽👍🏽👍🏽" function length(str) | Param | Type | Default | Description |
|---|---|---|---|
| str | String | none | String to return the length for |
length("Iñtërnâtiônàlizætiøn☃💩");// 22function substring(str, start[, end]) | Param | Type | Default | Description |
|---|---|---|---|
| str | String | none | String to be devided |
| start | Number | none | Start position |
| end | Number | End of string | End position |
substring("Emojis 👍🏽 are 🍆 poison. 🌮s are bad.",7,14);// "👍🏽 are 🍆"function substr(str[, start[, length]]) | Param | Type | Default | Description |
|---|---|---|---|
| str | String | none | String to be devided |
| start | Number | Start of string | Start position |
| length | Number | String length minus start parameter | Length of result |
substr("A.C. Milan 🇮🇹⚽️",5,7);// "Milan 🇮🇹"$ npm testThis library scores high in a length benchmark (it's intended usage) and should be fast for most use case.
Stringz .length (accruate) x 861,039 ops/sec ±1.57% (84 runs sampled) Lodash .toArray (accruate) x 795,108 ops/sec ±2.13% (82 runs sampled) Emoji Aware .split (inaccurate) x 2,269 ops/sec ±1.38% (85 runs sampled) Spliddit .length (inaccurate) x 487,718 ops/sec ±2.21% (83 runs sampled) UTF8 Length (inaccurate) x 232,918 ops/sec ±1.02% (87 runs sampled) Fastest is Stringz .length To run benchmarks yourself:
$ cd ./benchmark $ npm install $ node run.js| Version | Date | Notes |
|---|---|---|
| 0.2.2 | 2017-06-20 | Fix Typescript Definition Issue #14 |
| 0.2.1 | 2017-05-27 | Add Typescript Definitions |
| 0.2.0 | 2017-04-30 | New substr function |
| 0.1.2 | 2017-04-25 | Fix null length issue #8 |
| 0.1.1 | 2016-07-31 | More strict type checking, more tests |
| 0.1.0 | 2016-07-29 | Renamed to Stringz, more tools |
| 0.0.10 | 2016-07-29 | Fixed substring issue |
| 0.0.9 | 2016-07-28 | Fixed unicode string length issue |
| 0.0.8 | 2016-07-26 | First usable release |
This software is released under the MIT License.
Uses a RegExp from the Lodash which is released under the MIT License.