先ほど、
<img src="hoge.jpg" alt="hoge">
を、一括で
<img src="hoge.jpg" alt="hoge" title="hoge">
にする正規表現で、
s/alt="\(.*\)"/alt="\1" title="\1"/g
<img src="(.*?)\.jpg" alt="(.*?)">
という回答をもらいました。
これは、うまくいったのですが、
<img> タグの中の alt であること
また、
alt タグがない、<img> もひっかけたい
という要件を、正規表現に追加することは可能なんでしょうか?
ちょっと、正規表現が面白くなってきました
alt属性がないimg要素にマッチさせるには、前回の回答を踏まえると次のようになります。
検索文字列:
<img src="(.*?)\.jpg"( alt="(.*?)")?>
alt属性全体をグループ化して「?」(0回か1回出現)をつけます。
変換する場合は次のような感じになりますね(これはalt属性ない場合はだめですけど)
置換後文字列:
<img src="\1.jpg"\2 title="\3">
コメント(6件)
正規表現中に「<img ~」とあるので、元からimgタグ以外のタグにはマッチしないですね。
ただ、この条件の場合、alt がなかったとき、alt="" title="" となってしまうんでしょうか?
ちょっと、検証環境がないので、また試してみたいと思いますが
alt がなかったら、そもそも、この操作の対象にならないという条件も追加できると面白いですね
確かに、これだとそうなりそうですね
<img src="\1.jpg" alt="\2" title="\3">
これで
<img src="hoge.jpg" alt="" title="">
になるのかな
takabowさんの回答のとおりです。
> <img src="\1.jpg" alt="\2" title="\3">
でもいいですが、仕組み的には検索文字列を
<img src="(.*?)\.jpg"(?: alt="(.*?)")?>
として、置換文字列を
<img src="\1.jpg" alt="\2" title="\2">
とするほうがいいかもですね。プログラムなどで使う場合はもうちょっと柔軟な正規表現にしたほうがいいですが、置換目的にはこれで十分かと思います。
少し、勉強してみよういう意欲が沸いてきました
ありがとうございました