teratail header banner
teratail header banner
質問するログイン新規登録

回答編集履歴

2

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

2018/10/10 08:16

投稿

mather
mather

スコア6765

answer CHANGED
@@ -11,7 +11,7 @@
11
11
 
12
12
  > 文字列中で pattern にマッチした部分を順番にブロックに渡し、 その実行結果で置き換えた文字列を生成して返します。
13
13
 
14
- ```
14
+ ```ruby
15
15
  replaced_body_md = body_md.gsub(/[[(.+)]]/) { |(ref)|
16
16
  "[#{ref}](/posts/#{name_tbl[ref]})"
17
17
  }

1

gsubの使い方をコメント

2018/10/10 08:16

投稿

mather
mather

スコア6765

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