我正在尝试创建一个函数,从代码中删除无关的开始标签,使其显示得更整齐。就像在,我希望我的功能转向:
<div>
<div>
<p>Blah</p>
</div>
</div>
进入这个:
<div>
<div>
<p>Blah</p>
</div>
</div>
(所有这一切的目标是创建一个Rails部分,我可以粘贴格式化代码,以便在左侧对齐的预标记中显示。)
到目前为止,我已经有了这个,但这是错误的,我不知道为什么。从来没有使用过gsub,所以我猜测问题就在那里(虽然调试说明也指向第一个“结束”行):
def tab_stripped(code)
# find number of tabs in first line
char_array = code.split(//)
counter = 0
char_array.each do |c|
counter ++ if c == "\t"
break if c != "\t"
end
# delete that number of tabs from the beginning of each line
start_tabs = ""
counter.times do
start_tabs += "\t"
end
code.gsub!(start_tabs, '')
code
end
有什么想法吗?
答案 0 :(得分:4)
来自我的个人图书馆(稍作修改):
class String
def unindent; gsub(/^#{scan(/^\s+/).min}/, "") end
end
它比你要求的更为通用。它不仅可以处理制表符,还可以处理空格,它不会调整到第一行,而是调整到最小的缩进行。
puts <<X.unindent
<div>
<div>
<p>Blah</p>
</div>
</div>
X
给出:
<div>
<div>
<p>Blah</p>
</div>
</div>