2

我正在尝试使用正则表达式在某些代码中查找匹配项。

我正在使用的字符串

"input[type=radio],input[type=checkbox] {"

为了匹配这一点,我为每个括号添加了转义字符:

"input\[type=radio\],input\[type=checkbox\] \{"

我正在运行.match以在特定代码行中查找匹配项:

"input[type=radio],input[type=checkbox] {".match(/input\[type=radio\],input\[type=checkbox\] \{/)

哪个有效。但是当我把它们变成变量时,它没有。

str = "input[type=radio],input[type=checkbox] {"
code_to_match_against = "input\[type=radio\],input\[type=checkbox\] \{"

str.match(/#{code_to_match_against}/) # => nil

我究竟做错了什么?

4

1 回答 1

3

这里的双引号:

code_to_match_against = "input\[type=radio\],input\[type=checkbox\] \{"

正在吃你的反斜杠。考虑一下:

>> code_to_match_against = "input\[type=radio\],input\[type=checkbox\] \{"
>> p code_to_match_against
"input[type=radio],input[type=checkbox] {"

因此,当您插入code_to_match_against正则表达式时,正则表达式引擎认为您正在使用两个字符类:

/input[type=radio],input[type=checkbox] {/
#     ^^^^^^^^^^^^      ^^^^^^^^^^^^^^^

并且字符类一次只匹配一个字符(除非您附加*+)。

将反斜杠加倍以使它们超过双引号或使用单引号代替:

>> code_to_match_against = 'input\[type=radio\],input\[type=checkbox\] \{'
>> p code_to_match_against
"input\\[type=radio\\],input\\[type=checkbox\\] \\{"
>> puts code_to_match_against
input\[type=radio\],input\[type=checkbox\] \{
于 2012-10-09T01:25:56.783 回答