# React String Replace
[](https://circleci.com/gh/iansinnott/react-string-replace)
[](https://www.npmjs.com/package/react-string-replace)
A simple way to safely do string replacement with React components
> Aka turn a string into an array of React components
## Install
```
$ npm install --save react-string-replace
```
## Usage
### Simple Example
```js
const reactStringReplace = require('react-string-replace')
reactStringReplace('whats your name', 'your', (match, i) => (
{match}
));
// => [ 'whats ', your, ' name' ]
```
### More realistic example
Highlight all digits within a string by surrounding them in span tags:
```js
reactStringReplace('Apt 111, phone number 5555555555.', /(\d+)/g, (match, i) => (
{match}
));
// =>
// [
// 'Apt ',
// 111,
// ', phone number ',
// 5555555555,
// '.'
// ]
```
### Within a React component
```js
const reactStringReplace = require('react-string-replace');
const HighlightNumbers = React.createClass({
render() {
const content = 'Hey my number is 555-555-5555.';
return (
{reactStringReplace(content, /(\d+)/g, (match, i) => (
{match}
))}
);
},
});
```
### Multiple replacements on a single string
You can run multiple replacements on one string by calling the function multiple times on the returned result. For instance, if we want to match URLs, @-mentions and hashtags in a string we could do the following:
```js
const reactStringReplace = require('react-string-replace')
const text = 'Hey @ian_sinn, check out this link https://github.com/iansinnott/ Hope to see you at #reactconf';
let replacedText;
// Match URLs
replacedText = reactStringReplace(text, /(https?:\/\/\S+)/g, (match, i) => (
{match}
));
// Match @-mentions
replacedText = reactStringReplace(replacedText, /@(\w+)/g, (match, i) => (
@{match}
));
// Match hashtags
replacedText = reactStringReplace(replacedText, /#(\w+)/g, (match, i) => (
#{match}
));
// => [
// 'Hey ',
// @ian_sinn
// ', check out this link ',
// https://github.com/iansinnott/,
// '. Hope to see you at ',
// #reactconf,
// '',
// ];
```
### Full Example
See the [`example/`](https://github.com/iansinnott/react-string-replace/tree/master/example) directory for a runnable example.
## Why?
I wanted an easy way to do string replacement a la `String.prototype.replace` within React components **without** breaking React's built in string escaping functionality. This meant standard string replacement combined with `dangerouslySetInnerHTML` was out of the question.
## API
### reactStringReplace(string, match, func)
#### string
Type: `string|array`
The string or array you would like to do replacement on.
**NOTE:** When passed an array this is the same as running the replacement on every string within the array. Any non-string values in the array will be left untouched.
#### match
Type: `regexp|string`
The string or RegExp you would like to replace within `string`. Note that when using a `RegExp` you **MUST** include a matching group.
Example: Replace all occurrences of `'hey'` with `hey`
```js
reactStringReplace('hey hey you', /(hey)/g, () => hey);
```
#### func
Type: `function`
The replacer function to run each time `match` is found. This function will be passed the matching string and an `index` which can be used for adding keys to replacement components if necessary. Character `offset` identifies the position of match start in the provided text.
```js
const func = (match, index, offset) => {match};
reactStringReplace('hey hey you', /(hey)/g, func);
```
## License
MIT © [Ian Sinnott](https://github.com/iansinnott)