我尝试开发一种 super 基本模板语言,但我在 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
我应该做什么?
最佳答案
您需要按此顺序定义正则表达式(并注意与强、下划线和粗体标签的惰性匹配以及每个标签前面的单词边界 \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
关于ruby - 正则表达式链替换问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37149435/