# React String Replace [![Build Status](https://img.shields.io/circleci/project/iansinnott/react-string-replace.svg)](https://circleci.com/gh/iansinnott/react-string-replace) [![react-string-replace.js on NPM](https://img.shields.io/npm/v/react-string-replace.svg)](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)