2013-03-27 77 views
0

我想做的事:红宝石:在一个循环中去逃避特殊符号

text.gsub('\a', "\a").gsub('\b', "\b")......gsub('\n', "\n").....gsub('\t', "\t")......gsub('\z', "\z") 

我来到这个代码:

('a'..'z').each { |sym| text.gsub!("\\#{sym}", "\#{sym}") } 

但问题是,我无法生成"\#{sym}"这里就好像它是"\n""\t"

+0

你想达到什么是真的吗? – 2013-03-27 19:20:29

+0

@maximus:我打算用\\替换\,但起初我必须替换\ n这样的序列,因为它们不应该被涉及。关于正则表达式 - 它们对我来说太复杂了。 – Paul 2013-03-27 19:27:39

+0

似乎很清楚他正试图将字符串的转义形式(“\ n”转换为换行符,“\ t”转换为tabstop等)。 – Chuck 2013-03-27 19:28:16

回答

2

不幸的是没有一个“好”的方法来做到这一点。需要这样做的正常情况是解码像AJAX这样的传输格式,但这些库本身只实现了正确的映射,所以你很少需要它在你自己的代码中。你有两种选择:

  1. 自己写出映射,就像你在原始代码中做的一样。你可以做的一件事就是创建一个字典并循环,而不是链接gsub。

  2. 使用eval创建一个字符串。例如:

    c = 'n' 
    newline = eval "\"\\#{c}\"" 
    
+0

我喜欢'eval'的方式,但我应该跳过\ u序列,因为它用于编写Unicode符号,需要随后是代码。 – Paul 2013-03-27 19:43:42