带有函数的Ruby eval字符串

时间:2016-02-26 18:30:20

标签: ruby escaping double-quotes

我正在尝试评估表达式:

eval "\"1 pages\".gsub(/\D/,'')"

它始终检索'1 pages',而我只期望字符串'1'

为什么eval会忽略gsub

3 个答案:

答案 0 :(得分:1)

你需要转义反斜杠,因为你在插值字符串中:

eval "\"1 pages\".gsub(/\\D/, '')"

或者只是不要使用双引号,因为你不需要插值:

eval '"1 pages".gsub(/\D/, "")'

答案 1 :(得分:1)

  

为什么eval会忽略gsub

没有。它可能看起来如此,因为\D在双引号中没有特殊含义,因此它被解释为普通"D""D"内没有"1 pages"

答案 2 :(得分:1)

你也希望逃避D,因为这是正则表达式的一部分而不是单独的字符“D”:

eval "\"1 pages\".gsub(/\\D/,'')"