我正在尝试创建一个检查多个条件的常规(ruby)表达式。我使用这个正则表达式来替换我的对象的内容。我的正则表达式接近完成,除了我在降价方面面临的两个问题。
首先,标题给我带来了麻烦。例如,如果“Hi”在标题中,我不想将“Hi”替换为“Hello”。
Hi John <== # should not change
==================
文字:嗨,你好吗?<== # 应该是:你好,你好吗?替换后
或者:
#### Hi Peter <== # should not change
文字:嗨,你好吗?<== # 应该是:你好,你好吗?替换后
问题:如何在我的正则表达式中转义 markdown 标头?我尝试过否定的后向和前瞻断言,但无济于事。
我的第二个问题应该很容易,但不知何故我正在挣扎。如果单词是斜体“ hi ”,我想查找并替换它们,而不更改下划线。我可以用这个正则表达式找到这个词:
\b[_]*hi[_]*\b
问题2:但如果我要替换它,我也会更改下划线。有没有办法只检测单词本身并替换它,同时仍然使用单词边界?
代码示例
@website.autolinks.all.each do |autolink|
autolink.name #for example returns "Iphone5"
autolink.url #for example returns "http://www.apple.com"
regex = /\b(?<!##\s)(?<![\d.\[])([_]*)#{autolink.name}([_]*)(?![\d'"<\/a>])\b/
if @permalink.blog_entry.content.match(regex)
@permalink.blog_entry.content.gsub!(regex, "[#{autolink.name}](# {autolink.url})")
end
end
示例文本
Iphone5
==============
Iphone5 是目前最好的手机,尽管三星的人可能认为,或者可能只希望他们的三星 Galaxy S3 更好。
#### Samsung Galaxy S3?
是的,这是最新款三星手机的名称。
这将产生带有 HTML 标记的文本,但是当我使用正则表达式时,我的内容使用 Markdown 语法(在降价转换器之前使用)。