我尝试开发超级基本模板语言,我遇到了RegEx问题,我尝试将其转换为:
# Tilte
## Subtitle
### Subsubtitle
Lorem ipsum b(dolor) sit i(amet), consectetur u(adipisicing) elit
到此:
<h1>Title</h1>
<h2>Subtilte</h2>
<h3>Subsubtitle</h3>
Lorem ipsum <strong>dolor</strong> sit <i>amet</i>, consectetur <u>adipisicing</u> elit
但我明白了:
<h1></h1>
<h2>TEma 4</h2>
<h3>Subtitle</h3>
Lorem ipsum <strong>Subsubtitle</strong> sit i(amet), consectetur u(adipisicing) elit
这是我的代码:
input = ARGV[0]
regExes = {
h1: [/^# (.*)$/, "<h1>", "</h1>"],
h2: [/^## (.*)$/, "<h2>", "</h2>"],
h3: [/^### (.*)$/, "<h3>", "</h3>"],
b: [/b\((.*)\)/, "<strong>", "</strong>"],
}
strFile = File.read input
puts "\t", strFile
for index, regEx in regExes
actualNode = regExes[index]
print actualNode, "\n"
strFile.gsub! actualNode[0], "#{actualNode[1]}#{$1}#{actualNode[2]}"
end
puts strFile
我该怎么办?
答案 0 :(得分:2)
您需要按此顺序定义正则表达式(并注意与每个正面的强,下划线和粗体标签以及单词边界\b
的延迟匹配,以确保我们不匹配部分单词):
regExes = {
h3: [/^### (.*)$/, "<h3>", "</h3>"],
h2: [/^## (.*)$/, "<h2>", "</h2>"],
h1: [/^# (.*)$/, "<h1>", "</h1>"],
b: [/\bb\((.*?)\)/, "<strong>", "</strong>"],
i: [/\bi\((.*?)\)/, "<i>", "</i>"],
u: [/\bu\((.*?)\)/, "<u>", "</u>"],
}
然后使用非破坏性gsub
:
input = input.gsub(actualNode[0], "#{actualNode[1]}\\1#{actualNode[2]}")
请参阅此IDEONE demo
答案 1 :(得分:1)
而不是gsub!
行试试这个......
strfile = actualNode[1]+actualNode[0].match(strfile)[1]+actualNode[2] if actualNode[0].match(strfile)