我在Ruby中有一个正则表达式,在多行模式下无法正常工作.
我正在尝试将Markdown文本转换为Redmine中使用的Textile-eque标记.问题出在我转换代码块的正则表达式中.它应该找到任何带有4个空格或标签的行,然后将它们包装在预标签中.
markdownText = '# header
some text that precedes code
var foo = 9;
var fn = function() {}
fn();
some post text'
puts markdownText.gsub!(/(^(?:\s{4}|\t).*?$)+/m,"<pre>\n\\1\n</pre>")
Run Code Online (Sandbox Code Playgroud)
预期结果:
# header
some text that precedes code
<pre>
var foo = 9;
var fn = function() {}
fn();
</pre>
some post text
Run Code Online (Sandbox Code Playgroud)
问题是关闭预标记打印在文档的末尾而不是"fn();"之后.我尝试了以下表达式的一些变体,但它不匹配:
gsub!(/(^(?:\s{4}|\t).*?$)+^(\S)/m, "<pre>\n\\1\n</pre>\\2")
Run Code Online (Sandbox Code Playgroud)
如何使正则表达式仅与缩进的代码块匹配?你可以在这里测试Rubular上的这个正则表达式.