回答編集履歴

2

シンタックスハイライトをつける

2018/10/10 08:16

投稿

mather
mather

スコア6753

test CHANGED
@@ -24,7 +24,7 @@
24
24
 
25
25
 
26
26
 
27
- ```
27
+ ```ruby
28
28
 
29
29
  replaced_body_md = body_md.gsub(/[[(.+)]]/) { |(ref)|
30
30
 

1

gsubの使い方をコメント

2018/10/10 08:16

投稿

mather
mather

スコア6753

test CHANGED
@@ -9,3 +9,27 @@
9
9
  はおそらく `$name_tbl[ref]` で発生しています。 `$name_tbl` (グローバル変数)は無いですから、 `nil` になってしまいます。
10
10
 
11
11
  `name_tbl[ref]` でいいんじゃないでしょうか。
12
+
13
+
14
+
15
+ それと、`scan` と `gsub!` を同時に使うのは良くないと思います。scanで一度検索したあと、その文字列そのものを置き換えると挙動がおかしくなりかねません。
16
+
17
+ `gsub` は `scan` と同じようにブロックを使うことが出来ます。
18
+
19
+ https://docs.ruby-lang.org/ja/latest/method/String/i/gsub.html
20
+
21
+
22
+
23
+ > 文字列中で pattern にマッチした部分を順番にブロックに渡し、 その実行結果で置き換えた文字列を生成して返します。
24
+
25
+
26
+
27
+ ```
28
+
29
+ replaced_body_md = body_md.gsub(/[[(.+)]]/) { |(ref)|
30
+
31
+ "[#{ref}](/posts/#{name_tbl[ref]})"
32
+
33
+ }
34
+
35
+ ```