
Security News
Deno 2.4 Brings Back deno bundle, Improves Dependency Management and Observability
Deno 2.4 brings back bundling, improves dependency updates and telemetry, and makes the runtime more practical for real-world JavaScript projects.
String manipulation library build on top of Rambda
Will move to Typescript
import { camelCase } from 'string-fn'
console.log(camelCase('foo-bar-baz'))
// => fooBarBaz
Use yarn add string-fn for Webpack and Node.js usage:
For browser usage, the exported global is StringFn
and the CDN link is the following:
https://unpkg.com/rambda@2.11.0/dist/stringFn.umd.js
between(str, left, right)
It returns str substring found between left and right markers.
stringFn.between('begin foobarbaz end', 'foo', 'baz')
// => 'bar'
stringFn.between('begin foo bar baz end', 'foo', 'baz')
// => 'bar'
stringFn.between('begin foo bar baz end', 'q', 'x')
// => 'begin foo bar baz end'
It converts a string to camel case string.
stringFn.camelCase('Foo-Bar')
// => 'fooBar'
stringFn.camelCase('--foo.bar')
// => 'fooBar'
stringFn.camelCase('Foo-Bar')
// => 'fooBar'
stringFn.camelCase('foo bar BAZ')
// => 'fooBarBaz'
stringFn.camelCase('foo-bar-baz')
// => 'fooBarBaz'
It converts a string to constant case string.
stringFn.constantCase('FooBarBaz')
// => 'FOO_BAR_BAZ'
count(str, substring)
It counts number of occurances of substring within str.
stringFn.count('fooBarfoo', 'foo')
// => 2
stringFn.count('fooBarfoo', 'baz')
// => 0
stringFn.count('foo1 Bar foo1 baz Foo1 foo1', 'foo1')
// => 3
distance(firstString, secondString)
It calculates Levenshtein distance between firstString and secondString.
stringFn.distance('foobarbaz', 'ffoobarbaz')
// => 1
stringFn.distance('foobarbaz', 'foo')
// => 6
stringFn.distance('foo', 'foobarbaz')
// => 6
stringFn.distance('foobarbaz', 'foobarbaz')
// => 0
distanceGerman(firstString, secondString)
It calculates Levenshtein distance between two normalized German strings.
stringFn.distanceGerman('foobarbaz', 'ffoobarbaz')
// => 1
stringFn.distanceGerman('schön', 'shön')
// => 1
stringFn.distanceGerman('Müde', 'mude')
// => 0
stringFn.distanceGerman('die Männer', 'die manner')
// => 0
stringFn.distanceGerman('der anlass', 'der Anlaß')
// => 0
It converts a string to dot case string.
stringFn.dotCase('FooBarBAZ')
// => 'foo.bar.baz'
glob(str, globRule)
Returns boolean of str following globRule.
Three types of valid glob rules:
stringFn.glob('/home/dev/foo.js', '*.js')
// => true
stringFn.glob('/home/dev/foo.js', '*.ts')
// => false
stringFn.glob('/home/dev/foo.js', '/home/*')
// => true
stringFn.glob('/home/dev/foo.js', '*/dev/foo*')
// => true
indent(str:string, indentCount:number)
It indents each line in str with intentCount spaces.
stringFn.indent('foo\nbar\nbaz', 4)
// => ' foo\n bar\n baz'
It converts a string to kebab case string.
stringFn.kebabCase('fooBarBaz')
// => 'foo-bar-baz'
stringFn.kebabCase('foo_bar_baz')
// => 'foo-bar-baz'
stringFn.kebabCase('Foo Bar BAZ')
// => 'foo-bar-baz'
stringFn.kebabCase('__FOO_BAR__')
// => 'foo-bar'
stringFn.kebabCase('Foo Bar BAZ')
// => 'foo-bar-baz'
Typing
maskSentence( {
sentence: string,
easyMode: boolean = false,
easierMode: boolean = false,
randomMode: boolean = false,
replacer: string = '_',
charLimit: number = 4,
words: string[] = []
} )
Example
const sentence = 'it was, for what i need, good.'
const {hidden , visible} = stringFn.maskSentence({ sentence })
// hidden => ['it', 'was', ',', 'for', 'what', 'i', 'need', ',', 'good', '.']
// visible => ['i_', 'w_s', ',', 'f_r', 'w__t', 'i', 'n__d', ',', 'g__d', '.']
Returns object with notation {visible: Array, hidden: Array}
visible is array of masked words following the rules:
hidden is the unmasked version of visible
You can pass words array so the masking rule is applied only to members of words.
const sentence = 'it was good.'
const words = ['good']
const {hidden, visible} = stringFn.maskSentence({ sentence, words })
// hidden => ['it', 'was', 'good', '.']
// visible => ['it', 'was', 'g__d', '.']
Typing
maskWords({
words:string,
replacer:string = '_',
charLimit: number = 3
})
Example
stringFn.maskWords({words:'James Brown'})
// => 'J___s B___n'
stringFn.maskWords({words:'James'})
// => 'J___s'
It returns a string that is a masked version of words
Each word of words is masked following the rules:
If word is longer than charLimit, then each char from the middle part is replaced with replacer
If word is shorter than charLimit, then each char from the tail is replaced with replacer
It converts a string to pascal case string.
stringFn.pascalCase('fooBarBAZ')
// => 'FooBarBaz'
stringFn.removeIndent(' foo\n bar\n baz')
// => 'foo\nbar\nbaz'
stringFn.reverse('fooBarBaz')
// => 'zaBraBoof'
seoTitle(str:String, limit = 3)
Capitalize each word of str as long as word's length is higher or equal to limit. First word is always capitalized.
stringFn.seoTitle('in my time |,of dying')
// => 'In my Time of Dying'
stringFn.seoTitle('i got ants in my pants')
// => 'I Got Ants in my Pants'
stringFn.seoTitle('i got ants in my pants', 2)
// => 'I Got Ants In My Pants'
stringFn.shuffle('fooBar') // => aforBo
It converts a string to snake case string.
stringFn.snakeCase('foo bar BAZ')
// => 'foo_bar_baz'
It generates an array with all parts of the suplied string.
stringFn.snakeCase('I need, more.')
// => ['I', 'need', ',', 'more', '.']
It removes all the punctuation marks from str
stringFn.stripPunctuation('If my, wings should, fail me ...')
// => 'If my wings should fail me '
It removes Html tags from the supplied string.
stringFn.stripTags('<p>foo <b>bar</b> <hr/> baz</p>')
// => 'foo bar baz'
It converts a string to title case string.
stringFn.titleCase('foo bar BAZ')
// => 'Foo Bar Baz'
trim(str)
It trims str and turns multiple whitespace to single whitespace.
stringFn.trim(' foo bar baz ')
// => 'foo bar baz'
words(str)
It returns array with the words within str.
stringFn.words('fooBarBaz')
// => [ 'foo', 'Bar', 'Baz' ]
wordsX(str)
It is same as words
, but for extended Latin languages(German, French, Finnish, etc.).
FAQs
String manipulation library
The npm package string-fn receives a total of 1,740 weekly downloads. As such, string-fn popularity was classified as popular.
We found that string-fn demonstrated a healthy version release cadence and project activity because the last version was released less than a year ago. It has 0 open source maintainers 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
Deno 2.4 brings back bundling, improves dependency updates and telemetry, and makes the runtime more practical for real-world JavaScript projects.
Security News
CVEForecast.org uses machine learning to project a record-breaking surge in vulnerability disclosures in 2025.
Security News
Browserslist-rs now uses static data to reduce binary size by over 1MB, improving memory use and performance for Rust-based frontend tools.