diff --git a/lib/highlighter.js b/lib/highlighter.js index fb734ce..568cd3d 100644 --- a/lib/highlighter.js +++ b/lib/highlighter.js @@ -140,6 +140,7 @@ var Highlighter = createReactClass({ getMatchBoundaries: function(subject, search) { var matches = search.exec(subject); if (matches) { + search.lastIndex = 0; return { first: matches.index, last: matches.index + matches[0].length @@ -172,6 +173,7 @@ var Highlighter = createReactClass({ children.push(this.renderPlain(remaining)); return children; } + search.lastIndex = 0; var boundaries = this.getMatchBoundaries(remainingCleaned, search); diff --git a/test/testHighlighter.js b/test/testHighlighter.js index cec213b..e138660 100644 --- a/test/testHighlighter.js +++ b/test/testHighlighter.js @@ -123,6 +123,14 @@ describe('Highlight element', function() { expect(matches).to.have.length(0); }); + it('should support regular expressions with the global parameter', function() { + var element = React.createElement(Highlight, {search: /brown|fox/g}, 'The quick brown fox jumped over the lazy dog.'); + var node = TestUtils.renderIntoDocument(element); + var matches = TestUtils.scryRenderedDOMComponentsWithTag(node, 'mark'); + expect(ReactDOM.findDOMNode(matches[0]).textContent).to.equal('brown'); + expect(ReactDOM.findDOMNode(matches[1]).textContent).to.equal('fox'); + }); + it('should stop immediately if regex matches an empty string', function() { var element = React.createElement(Highlight, {search: /z*/}, 'Ez as 123, ABC...'); var node = TestUtils.renderIntoDocument(element);