複数の条件をチェックする通常の(ruby)式を作成しようとしています。この正規表現を使用して、オブジェクトのコンテンツを置き換えます。マークダウンに関して直面している2つの問題を除いて、私の正規表現はほぼ完成に近づいています。
まず、ヘッダーが問題を引き起こしています。たとえば、ヘッダーに「Hi」が含まれている場合、「Hello」を「Hi」に置き換えたくありません。
Hi John <== # should not change
==================
テキスト:こんにちは、お元気ですか?<==#あるべき:こんにちは、お元気ですか?置換後
または:
#### Hi Peter <== # should not change
テキスト:こんにちは、お元気ですか?<==#あるべき:こんにちは、お元気ですか?置換後
質問:正規表現内のマークダウンヘッダーをエスケープするにはどうすればよいですか?ネガティブな後読みと先読みのアサーションを試しましたが、役に立ちませんでした。
私の2番目の問題は非常に簡単なはずですが、どういうわけか私は苦労しています。単語が斜体の場合「こんにちは」アンダースコアを変更せずに、単語を見つけて置き換えたいと思います。私はこの正規表現で単語を見つけることができます:
\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
==============
サムスンの人々はおそらくサムスンギャラクシーS3がより良いと思っているか、おそらくそれを望んでいるにもかかわらず、iPhone5は最高の携帯電話です。
#### Samsung Galaxy S3?
はい、それは最新のサムスンの携帯電話の名前です。
これにより、HTMLタグ付きのテキストが作成されますが、正規表現を使用する場合、コンテンツはMarkdown構文(マークダウンコンバーターの前に使用)を使用します。