react-native-autolink icon indicating copy to clipboard operation
react-native-autolink copied to clipboard

feat request: string pattern support

Open ridvanaltun opened this issue 1 year ago • 1 comments

Hey, I did something like this to support string patterns:

import React from 'react';

import Autolink, {AutolinkProps, CustomMatcher} from 'react-native-autolink';

const escapeRegExp = (value: string) => {
  return value.replace(/[-\/\\^$*+?.()|[\]{}]/g, '\\$&');
};

interface CustomMatcherInstance extends Omit<CustomMatcher, 'pattern'> {
  pattern: RegExp | string;
}

interface Props extends Omit<AutolinkProps, 'matchers'> {
  matchers: CustomMatcherInstance[];
}

const AutolinkInstance = ({matchers, ...props}: Props) => {
  return (
    <Autolink
      matchers={matchers.map(matcher => ({
        ...matcher,
        pattern:
          typeof matcher.pattern === 'string'
            ? new RegExp(escapeRegExp(matcher.pattern))
            : matcher.pattern,
      }))}
      {...props}
    />
  );
};

export default AutolinkInstance;

My aim increase the usability. I don't know is there any issue with it but it worked so far.

What do you think? @joshswan

ridvanaltun avatar Aug 08 '24 15:08 ridvanaltun

My initial reaction is that I like the idea of a createMatcher (or similar) utility that helps create custom matchers and can support using string patterns. But it should probably also make it easy to create capturing groups, similar in concept to path-to-regexp.

Needing to rebuild the regex on every render is something I'd like to avoid, which is why I think it should be separate from the component itself.

joshswan avatar Aug 09 '24 18:08 joshswan