case-preserving string.replace
npm install --save preserve-case
import replace from 'preserve-case'
console.log(replace.all('foo bar FOO_BAR foo-bar fooBar foo-Bar', 'foo bar', 'baz qux'))
// baz qux BAZ_QUX baz-qux bazQux baz-Qux
replace(
str: string,
query: string | RegExp,
replacement: string | Function,
options?: {
caseTypes?: Array<string>
}
): string`
Works exactly like str.replace(query, replacement)
, except that:
- it preserves the case of what it replaces (using the marvelous
case
package) - if
query
is a string, it matchesquery
in any case. (Under the hood, it creates and uses aRegExp
with allcaseTypes
ofquery
joined together, e.g.str.replace(/foo bar|FOO BAR|fooBar|FooBar|.../, ...)
)
options.caseTypes
defaults to all types built into the case
package.
This may be more than you want, so look into it. For instance, the other cases of 'foo bar' include, but may not be
limited to:
'Foo Bar'
'Foo bar'
'FOO BAR'
'fooBar'
'FooBar'
'foo-bar'
'Foo-Bar'
'foo_bar'
'FOO_BAR'
Unlike replace
, this replaces all occurrences of query
, not just the first one, even if query
is a string
or
a RegExp
without the g
(global) flag.
Thanks to Nathan Bubna for his case
package, which powers preserve-case
!
Creates a RegExp
that matches for any case of the given query
string.
Like the other functions, options.caseTypes
defaults to all types built into
the case
package.
You may also pass a flags
option for the RegExp
flags (e.g. flags: 'g'
)