Easy way to split a string on a given character unless it's quoted or escaped.
npm install split-string> Easy way to split a string on a given character unless it's quoted or escaped.
Please consider following this project's author, Jon Schlinkert, and consider starring the project to show your :heart: and support.
Install with npm:
``sh`
$ npm install --save split-string
`js
const split = require('split-string');
console.log(split('a.b.c'));
//=> ['a', 'b', 'c']
// respects escaped characters
console.log(split('a.b.c\\.d'));
//=> ['a', 'b', 'c.d']
// respects double-quoted strings
console.log(split('a."b.c.d".e'));
//=> ['a', '"b.c.d"', 'e']
`
Type: Array|Boolean
Default: []
Description
Tell split-string not to split inside any of the quote characters specified on the quotes option. Each character signifies both the "opening" and "closing" character to use.
`js
// default behavior
console.log(split('a.b."c.d.e.f.g".h.i'));
//=> [ 'a', 'b', '"c', 'd', 'e', 'f', 'g"', 'h', 'i' ]
// with quotes
console.log(split('a.b."c.d.e.f.g".h.i', { quotes: ['"'] }));
//=> [ 'a', 'b', '"c.d.e.f.g"', 'h', 'i' ]
// escaped quotes will be ignored
console.log(split('a.b.\\"c.d."e.f.g".h.i', { quotes: ['"'] }));
//=> [ 'a', 'b', '"c', 'd', '"e.f.g"', 'h', 'i' ]
// example of how to exclude non-escaped quotes from the result
let keep = (value, state) => {
return value !== '\\' && (value !== '"' || state.prev() === '\\');
};
console.log(split('a.b.\\"c.d."e.f.g".h.i', { quotes: ['"'], keep }));
//=> [ 'a', 'b', '"c', 'd', 'e.f.g', 'h', 'i' ]
`
Type: Object|Boolean
Default: {}
Description
By default, no special significance is given to bracket-like characters (such as square brackets, curly braces, angle brackets, and so on).
`js`
// default behavior
console.log(split('a.{b.c}.{d.e}'));
//=> [ 'a', '{b', 'c}', '{d', 'e}' ]
When options.brackets is true, the following brackets types are supported:
`js`
{
'<': '>',
'(': ')',
'[': ']',
'{': '}'
}
For example:
`js`
console.log(split('a.{b.c}.{d.e}', { brackets: true }));
//=> [ 'a', '{b.c}', '{d.e}' ]
Alternatively, an object of brackets may be passed, where each key is the _opening bracket_ and each value is the corresponding _closing bracket_. Note that the key and value must be different characters. If you want to use the same character for both open and close, use the quotes option.
Examples
`js
// no bracket support by default
console.log(split('a.{b.c}.[d.e].f'));
//=> [ 'a', '{b', 'c}', '[d', 'e]', 'f' ]
// tell split-string not to split inside curly braces
console.log(split('a.{b.c}.[d.e].f', { brackets: { '{': '}' }}));
//=> [ 'a', '{b.c}', '[d', 'e]', 'f' ]
// tell split-string not to split inside any of these types: "<>{}[]()"
console.log(split('a.{b.c}.[d.e].f', { brackets: true }));
//=> [ 'a', '{b.c}', '[d.e]', 'f' ]
// ...nested brackets are also supported
console.log(split('a.{b.{c.d}.e}.f', { brackets: true }));
//=> [ 'a', '{b.{c.d}.e}', 'f' ]
// tell split-string not to split inside the given custom types
console.log(split('«a.b».⟨c.d⟩.[e.f]', { brackets: { '«': '»', '⟨': '⟩' } }));
//=> [ '«a.b»', '⟨c.d⟩', '[e', 'f]' ]
`
Type: function
Default: Function that returns true if the character is not \\.
Function that returns true when a character should be retained in the result.
Example
`js
console.log(split('a.b\\.c')); //=> ['a', 'b.c']
// keep all characters
console.log(split('a.b.\\c', { keep: () => true })); //=> ['a', 'b\.c']
`
Type: string
Default: .
The character to split on.
Example
`js`
console.log(split('a.b,c', { separator: ',' })); //=> ['a.b', 'c']
Optionally pass a function as the last argument to tell split-string whether or not to split when the specified separator is encountered.
Example
`js`
// only split on "." when the "previous" character is "a"
console.log(split('a.b.c.a.d.e', state => state.prev() === 'a'));
//=> [ 'a', 'b.c.a', 'd.e' ]
The state object exposes the following properties:
* input - (String) The un-modified, user-defined input stringseparator
* - (String) the specified separator to split on.index
* - (Number) The current cursor positionvalue
* - (String) The character at the current indexbos
* - (Function) Returns true if position is at the beginning-of-stringeos
* - (Function) Returns true if position is at the end-of-stringprev
* - (Function) Returns the previously scanned characternext
* - (Function) Returns the next character after the current positionblock
* - (Object) The "current" AST node.stack
* - (Array) AST nodes
Contributing
Pull requests and stars are always welcome. For bugs and feature requests, please create an issue.
Running Tests
Running and reviewing unit tests is a great way to get familiarized with a library and its API. You can install dependencies and run tests with the following command:
`sh`
$ npm install && npm test
Building docs
_(This project's readme.md is generated by verb, please don't edit the readme directly. Any changes to the readme must be made in the .verb.md readme template.)_
To generate the readme, run the following command:
`sh``
$ npm install -g verbose/verb#dev verb-generate-readme && verb
You might also be interested in these projects:
* deromanize: Convert roman numerals to arabic numbers (useful for books, outlines, documentation, slide decks, etc) | homepage")
* randomatic: Generate randomized strings of a specified length using simple character sequences. The original generate-password. | homepage
* repeat-string: Repeat the given string n times. Fastest implementation for repeating a string. | homepage
* romanize: Convert numbers to roman numerals (useful for books, outlines, documentation, slide decks, etc) | homepage")
| Commits | Contributor |
| --- | --- |
| 56 | jonschlinkert |
| 12 | doowb |
| 6 | Ovyerus |
| 1 | silverwind |
Jon Schlinkert
* GitHub Profile
* Twitter Profile
* LinkedIn Profile
Copyright © 2019, Jon Schlinkert.
Released under the MIT License.
*
_This file was generated by verb-generate-readme, v0.8.0, on April 22, 2019._