Package Exports
- string-kit
- string-kit/lib/camel
- string-kit/lib/camel.js
- string-kit/lib/escape
- string-kit/lib/escape.js
- string-kit/lib/format.js
- string-kit/lib/inspect.js
- string-kit/lib/latinize.js
- string-kit/lib/toTitleCase.js
- string-kit/lib/unicode.js
This package does not declare an exports field, so the exports above have been automatically detected and optimized by JSPM instead. If any package subpath is missing, it is recommended to post an issue to the original package (string-kit) to support the "exports" field. If that is not possible, create a JSPM override to customize the exports field for this package.
Readme
String Kit
A string manipulation toolbox, featuring a string formatter (inspired by sprintf), a variable inspector (output featuring ANSI colors and HTML) and various escape functions (shell argument, regexp, html, etc).
- License: MIT
- Current status: beta
- Platform: Node.js only (browser support is planned)
Install
Use Node Package Manager:
npm install string-kit
Reference
- .format()
- .format.count()
- .inspect()
- Escape functions collection
.format( formatString , ... )
- formatString
String
a string containing somesprintf()
-like formating - ...
mixed
a variable list of arguments to insert into the formatString
This function is inspired by the C
's sprintf()
function.
Basicly, if formatString
includes format specifiers (subsequences beginning with %), the additional arguments
following formatString
are formatted and inserted in the resulting string replacing their respective specifiers.
Also it diverges from C
in quite a few places.
New: Since v0.3.x we can add styles markup (color, bold, italic, and so on...) using the ^
caret.
See the format markup documentation.
Basic usage:
var format = require( 'string-kit' ).format ;
console.log( format( 'Hello %s %s, how are you?' , 'Joe' , 'Doe' ) ) ;
// Output: 'Hello Joe Doe, how are you?'
Specifiers:
%%
write a single %%s
string%f
float%d
or %i integer%u
unsigned integer%U
unsigned positive integer (>0)%h
unsigned hexadecimal%x
unsigned hexadecimal, force pair of symbols (e.g. 'f' -> '0f')%o
unsigned octal%b
unsigned binary%I
call string-kit's inspect()%Y
call string-kit's inspect(), but do not inspect non-enumerable%E
call string-kit's inspectError()%J
JSON.stringify()%D
drop, the argument does not produce anything but is eaten anyway%F
filter function existing in the this context, e.g. %[filter:%a%a]F%a
argument for a filter function
Few examples:
var format = require( 'string-kit' ).format ;
console.log( format( 'This company regains %d%% of market share.' , 36 ) ) ;
// Output: 'This company regains 36% of market share.'
console.log( format( '11/8=%f' , 11/8 ) ) ;
// Output: '11/8=1.375'
console.log( format( 'Hexa %h %x' , 11 , 11 ) ) ;
// Output: 'Hexa b 0b'
We can insert a number between the % sign and the letter of the specifier, this way, rather than using the next argument, it uses the Nth argument, this is the absolute position:
console.log( format( '%2s%1s%3s' , 'A' , 'B' , 'C' ) ) ; // 'BAC'
Also, the internal pointer is moved anyway, so the Nth format specifier still use the Nth argument if it doesn't specify any position:
console.log( format( '%2s%s%s' , 'A' , 'B' , 'C' ) ) ; // 'BBC'
If the number is preceded by a plus or a minus sign, the relative position is used rather than the absolute position.
console.log( format( '%+1s%-1s%s' , 'A' , 'B' , 'C' ) ) ; // 'BAC'
Use case: language.
var hello = {
en: 'Hello %s %s!' ,
jp: 'Konnichiwa %2s %1s!'
} ;
console.log( format( hello[ lang ] , firstName , lastName ) ) ;
// Output the appropriate greeting in a language.
// In japanese the last name will come before the first name,
// but the argument list doesn't need to be changed.
The mysterious %[]F
format specifier is used when we want custom formatter.
Firstly we need to build an object containing one or many functions.
Then, format()
should be used with call()
, to pass the functions collection as the this context.
The %[
is followed by the function's name, followed by a :
, followed by a variable list of arguments using %a
.
It is still possible to use relative and absolute positionning.
The whole format specifier is finished when a ]F
is encountered.
Example:
var filters = {
fxy: function( a , b ) { return '' + ( a * a + b ) ; }
} ;
console.log( format.call( filters , '%s%[fxy:%a%a]F' , 'f(x,y)=' , 5 , 3 ) ) ;
// Output: 'f(x,y)=28'
console.log( format.call( filters , '%s%[fxy:%+1a%-1a]F' , 'f(x,y)=' , 5 , 3 ) ) ;
// Output: 'f(x,y)=14'
Style markup reference
Since v0.3.x we can add styles (color, bold, italic, and so on...) using the ^
caret:
var format = require( 'string-kit' ).format ;
console.log( format( 'This is ^rred^ and ^bblue^:!' , 'Joe' , 'Doe' ) ) ;
// Output: 'This is red and blue!' with 'red' written in red and 'blue' written in blue.
Style markup:
^^
write a single caret^
^b
switch to blue^B
switch to bright blue^c
switch to cyan^C
switch to bright cyan^g
switch to green^G
switch to bright green^k
switch to black^K
switch to bright black^m
switch to magenta^M
switch to bright magenta^r
switch to red^R
switch to bright red^w
switch to white^W
switch to bright white^y
switch to yellow (i.e. brown or orange)^Y
switch to bright yellow (i.e. yellow)^_
switch to underline^/
switch to italic^!
switch to inverse (inverse background and foreground color)^+
switch to bold^-
switch to dim^:
reset the style^
(caret followed by a space) reset the style and write a single space^#
background modifier: next color will be a background color instead of a foreground color, e.g.:'Some ^#^r^bred background
text' will write red background in blue over red.
Note: as soon as the format string has one style markup, a style reset will be added at the end of the string.
.format.count( formatString )
- formatString
String
a string containing somesprintf()
-like formating
It just counts the number of format specifier in the formatString
.
.inspect( [options] , variable )
- options
Object
display options, the following key are possible:- style
String
this is the style to use, the value can be:- 'none': (default) normal output suitable for console.log() or writing into a file
- 'inline': like 'none', but without newlines
- 'color': colorful output suitable for terminal
- 'html': html output
- depth: depth limit, default: 3
- maxLength: length limit for strings, default: 250
- outputMaxLength: length limit for the inspect output string, default: 5000
- noFunc: do not display functions
- noDescriptor: do not display descriptor information
- noArrayProperty: do not display array properties
- noType: do not display type and constructor
- enumOnly: only display enumerable properties
- funcDetails: display function's details
- proto: display object's prototype
- sort: sort the keys
- minimal: imply noFunc: true, noDescriptor: true, noType: true, enumOnly: true, proto: false and funcDetails: false. Display a minimal JSON-like output.
- protoBlackList:
Set
of blacklisted object prototype (will not recurse inside it) - propertyBlackList:
Set
of blacklisted property names (will not even display it) - useInspect: use .inspect() method when available on an object (default to false)
- style
- variable
mixed
anything we want to inspect/debug
It inspect a variable, and return a string ready to be displayed with console.log(), or even as HTML output.
It produces a slightly better output than node's util.inspect()
, with more options to control what should be displayed.
Since options
come first, it is possible to use bind()
to create some custom variable inspector.
For example:
var colorInspect = require( 'string-kit' ).inspect.bind( undefined , { style: 'color' } ) ;
Escape functions collection
.escape.shellArg( str )
- str
String
the string to filter
It escapes the string so that it will be suitable as a shell command's argument.
.escape.regExp( str ) , .escape.regExpPattern( str )
- str
String
the string to filter
It escapes the string so that it will be suitable to inject it in a regular expression's pattern as a literal string.
Example of a search and replace from a user's input:
var result = data.replace(
new RegExp( stringKit.escape.regExp( userInputSearch ) , 'g' ) ,
stringKit.escape.regExpReplacement( userInputReplace )
) ;
.escape.regExpReplacement( str )
- str
String
the string to filter
It escapes the string so that it will be suitable as a literal string for a regular expression's replacement.
.escape.html( str )
- str
String
the string to filter
It escapes the string so that it will be suitable as HTML content.
Only < > &
are replaced by HTML entities.
.escape.htmlAttr( str )
- str
String
the string to filter
It escapes the string so that it will be suitable as an HTML tag attribute's value.
Only < > & "
are replaced by HTML entities.
It assumes valid HTML: the attribute's value should be into double quote, not in single quote.
.escape.htmlSpecialChars( str )
- str
String
the string to filter
It escapes all HTML special characters, < > & " '
are replaced by HTML entities.
.escape.control( str )
- str
String
the string to filter
It escapes all ASCII control characters (code lesser than or equals to 0x1F, or backspace).
Carriage return, newline and tabulation are respectively replaced by \r
, \n
and \t
.
Other characters are replaced by the unicode notation, e.g. NUL
is replaced by \x00
.
Full BDD spec generated by Mocha: