0

如何将字符串转换为正则表达式字符串,正确转义所有正则表达式特定字符?我正在使用插值来构建正则表达式字符串,以允许用户自定义正则表达式而无需接触代码(或期望他们知道正则表达式)

例子

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

当我的代码使用它时,这会导致以下正则表达式

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

这允许用户提供语言本地化,而不必担心弄清楚我的正则表达式在哪里使用、它是如何使用的,或者如果他们更改了某些内容是否会破坏脚本。

但是,如果他们想包含句点或问号之类的东西Hello?,我可能需要先将它们转义。

4

1 回答 1

5

使用Regexp.escape

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

例如:

>> puts /#{Regexp.escape('Hello?')}/.inspect
/Hello\?/
于 2012-08-19T04:07:47.237 回答