Claude-skill-registry js-hoist-regexp
Hoist RegExp creation outside render or memoize with useMemo(). Apply when using regular expressions in React components or frequently called functions.
install
source · Clone the upstream repo
git clone https://github.com/majiayu000/claude-skill-registry
Claude Code · Install into ~/.claude/skills/
T=$(mktemp -d) && git clone --depth=1 https://github.com/majiayu000/claude-skill-registry "$T" && mkdir -p ~/.claude/skills && cp -r "$T/skills/data/js-hoist-regexp" ~/.claude/skills/majiayu000-claude-skill-registry-js-hoist-regexp && rm -rf "$T"
manifest:
skills/data/js-hoist-regexp/SKILL.mdsource content
Hoist RegExp Creation
Don't create RegExp inside render. Hoist to module scope or memoize with
useMemo().
Incorrect (new RegExp every render):
function Highlighter({ text, query }: Props) { const regex = new RegExp(`(${query})`, 'gi') const parts = text.split(regex) return <>{parts.map((part, i) => ...)}</> }
Correct (memoize or hoist):
const EMAIL_REGEX = /^[^\s@]+@[^\s@]+\.[^\s@]+$/ function Highlighter({ text, query }: Props) { const regex = useMemo( () => new RegExp(`(${escapeRegex(query)})`, 'gi'), [query] ) const parts = text.split(regex) return <>{parts.map((part, i) => ...)}</> }
Warning (global regex has mutable state):
Global regex (
/g) has mutable lastIndex state:
const regex = /foo/g regex.test('foo') // true, lastIndex = 3 regex.test('foo') // false, lastIndex = 0