退出RegEx中的特殊字符?

Rac*_*cer 30 ruby regex ruby-on-rails

我有一个表单,它将文本字段的内容发送到我的Rails应用程序,我必须生成此字符串的正则表达式.

我试过这样的:

regex = /#{params[:text]}/
Run Code Online (Sandbox Code Playgroud)

通常这是有效的,但如果字符串中包含括号或特殊字符,则此方法将不起作用.

我不希望Rails照顾这些字符.它们应该自动转义.

我试过这样的:

/\Q#{params[:text]}\E/
Run Code Online (Sandbox Code Playgroud)

但这也不起作用.

Yos*_*ssi 44

你应该用 Regexp.escape

regex = /#{Regexp.escape(params[:text])}/
# in rails models/controllers with mongoid use:
# ::Regexp.escape(params[:text]) instead. ([more info][2])
Run Code Online (Sandbox Code Playgroud)


Ste*_*fan 8

Regexp.escape 逃避特殊字符:

params[:text] = "[foo-bar]"
Regexp.new(Regexp.escape(params[:text]))
# => /\[foo\-bar\]/
Run Code Online (Sandbox Code Playgroud)