MxLDevs
MxLDevs

Reputation: 19506

Converting String to Regex string

How can I transform a string into a regex string, properly escaping all regex-specific characters? I am using interpolation to build the regex string to allow users to customize the regex without having to touch the code (or expecting them to know regex)

Example

custom_text = "Hello"    
my_regex = /#{custom_text}:\s*(\d+)/i

Which results in the following regex when my code uses it

/Hello:\s*(\d+)/i

This allows users to perhaps provide language localizations without having to worry about figuring out where my regex is used, how it's used, or whether they will break the script if they changed something.

However if they wanted to include things like periods or question marks like Hello?, I would probably need to escape them first.

Upvotes: 0

Views: 1956

Answers (1)

mu is too short
mu is too short

Reputation: 434665

Use Regexp.escape:

my_regex = /#{Regexp.escape(custom_text)}:\s*(\d+)/i

For example:

>> puts /#{Regexp.escape('Hello?')}/.inspect
/Hello\?/

Upvotes: 5

Related Questions