Explain Codes LogoExplain Codes Logo

How to escape regular expression special characters using JavaScript?

javascript
regex
javascript-regex
security
Nikita BarsukovbyNikita Barsukov·Feb 17, 2025
TLDR

Avoid unwanted outcomes in pattern matching! Use this escape function to make any string regex-compliant:

function escapeRegExp(str) { // The regex party is fun, but not if special characters crash it! return str.replace(/[.*+?^${}()|[\]\\]/g, '\\$&'); }

Voila! Special characters are neatly put under shackles. For instance, "Earnings: $100.00 * 1.5" morphs into a regex-friendly "Earnings: \$100\.00 \* 1\.5".

Importance of escaping in regex

Regular expressions (regex) are akin to a secret language. Symbols like ^, $, * have special semantic roles. Ignoring to escape these characters can twist your intended pattern, leading to erratic results or a bone-dry match set.

Harnessing the power of \

The backslash (\) is the knight in shining armor in regex. Following a \, a special character sheds its power and becomes a literal. So, \. matches a period (.`), not any character as it would sans backslash.

Avoiding the pitfalls

It's tempting (and dangerous!) to overlook escaping characters when building regex patterns from user input or data. This complacency might open up Regular Expression Denial of Service (ReDoS) vulnerabilities. Our escapeRegExp function is a quick remedy.

Your escape map

Equip yourself with this handy reference list of special characters needing escape in a regex pattern:

^ $ \ . * + ? ( ) [ ] { } |

No standard escape function, no problem!

JavaScript is missing a built-in RegExp.escape function. But don't fret! Our escapeRegExp function serves as a reliable substitute. If you want to keep your hands clean, use a trusted library like escape-string-regexp on npm.

Bulletproof your regex and string handling

Regular expressions are efficient pattern matchers, but unleash their power sensibly, especially when grappling with unknown string content.

User input? Handle with care!

Always escape strings from user input in regex patterns. This will guard your application against attack injections and accidental matches. It's like using a seatbelt when driving.

Test for the best

Before weaving a regex into your code, put it through rigorous testing with various strings. Sneak a peek at tools like regex101 for instant debugging.

Make your application data-resilient

If you fetch data to build regex patterns dynamically, generate unit tests. These validate your escaping function's compatibility with varying dataset structures.