# js-hoist-regexp > Hoist RegExp creation outside render or memoize with useMemo(). Apply when using regular expressions in React components or frequently called functions. - Author: Santhana Krishnan - Repository: santakrishnan/bolt-design-system - Version: 20260129223208 - Stars: 1 - Forks: 0 - Last Updated: 2026-02-08 - Source: https://github.com/santakrishnan/bolt-design-system - Web: https://mule.run/skillshub/@@santakrishnan/bolt-design-system~js-hoist-regexp:20260129223208 --- --- name: js-hoist-regexp description: Hoist RegExp creation outside render or memoize with useMemo(). Apply when using regular expressions in React components or frequently called functions. --- ## Hoist RegExp Creation Don't create RegExp inside render. Hoist to module scope or memoize with `useMemo()`. **Incorrect (new RegExp every render):** ```tsx 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):** ```tsx 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: ```typescript const regex = /foo/g regex.test('foo') // true, lastIndex = 3 regex.test('foo') // false, lastIndex = 0 ```