react-string-replace icon indicating copy to clipboard operation
react-string-replace copied to clipboard

Multiple matches on same string

Open eylonronen opened this issue 7 years ago • 2 comments

Hi there, when using this twice on the same string what is happens is as follows, the first string matches and an array containing the react component returned from the callback fucktion is returned, and than in the second replace, it skips the symbol that was returned from the first run because it is not a string... I think the solution would be to use flattenDeep instead of flatten, and clarify that callback functions should return an array instead of a component.

eylonronen avatar Jul 29 '18 16:07 eylonronen

I could overcome this problem with recursion:

function myReplace(string: string | React.ReactNodeArray): React.ReactNodeArray {
  let result: React.ReactNodeArray;
  result = reactStringReplace(string, /123/, (match, i) => (
    <span key={match + i}>{myReplace(match)}</span>
  ));
  result = reactStringReplace(result, /abc/, (match, i) => (
    <span key={match + i}>{myReplace(match)}</span>
  ));
  // ....
  return result;
}

lukasjapan avatar Mar 29 '22 11:03 lukasjapan

yeah this regex thing doesn't work at all :/ (https?://|www.)[\w-.]+.[\w-.]+(/([\S]+)?)? https://regexr.com/ www.google.com

then I get www for this library. Should be www.google.com

Update: this regex works /(https?://(?:www.|(?!www))[a-zA-Z0-9][a-zA-Z0-9-]+[a-zA-Z0-9].[^\s]{2,}|www.[a-zA-Z0-9][a-zA-Z0-9-]+[a-zA-Z0-9].[^\s]{2,}|https?://(?:www.|(?!www))[a-zA-Z0-9]+.[^\s]{2,}|www.[a-zA-Z0-9]+.[^\s]{2,})/g just test with .split()

evanjmg avatar Mar 03 '23 15:03 evanjmg