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

回答編集履歴

2

コード追加

2021/10/19 17:28

投稿

退会済みユーザー
answer CHANGED
@@ -8,7 +8,7 @@
8
8
  ```javascript
9
9
  const replaceAddress = str => str.replace(
10
10
  /(\d+)丁目(\d+)番((\d+)号)?/,
11
- (_, p1, p2, p3, p4) => `${p1}-${p2}${p3 ? '-' + p4 : ''}`
11
+ (_, p1, p2, p3, p4) => (p3 ? [p1, p2, p4] : [p1, p2]).join('-')
12
12
  );
13
13
  ```
14
14
  っていう関数 `replaceAddress(str)` を作っておけば
@@ -27,4 +27,4 @@
27
27
  "新宿区西新宿2丁目8番" "新宿区西新宿2-8"
28
28
 
29
29
 
30
- ???? [CodePenで動作確認](https://codepen.io/kilesa/pen/bGreaJB?editors=0012)
30
+ ???? [CodePenで動作確認](https://codepen.io/kilesa/pen/MWveQWV?editors=0012)

1

コード追加

2021/10/19 17:28

投稿

退会済みユーザー
answer CHANGED
@@ -1,6 +1,4 @@
1
- 同じ結果になるとしても、
2
1
  「なんかいかにも正規表現(だったりreplaceだったり)を使いこなせてる風」なコードにしたいの?
3
-
4
2
  であれば、`replace()` の
5
3
  - 第1引数に渡す正規表現で、丸かっこ(キャプチャ)を使う。
6
4
  - 第2引数には関数を渡せる。
@@ -9,8 +7,8 @@
9
7
 
10
8
  ```javascript
11
9
  const replaceAddress = str => str.replace(
12
- /([0-9]+)丁目([0-9]+)番([0-9]+)?号?/,
10
+ /(\d+)丁目(\d+)番((\d+)号)?/,
13
- (_, p1, p2, p3) => `${p1}-${p2}${p3 ? '-' + p3 : ''}`
11
+ (_, p1, p2, p3, p4) => `${p1}-${p2}${p3 ? '-' + p4 : ''}`
14
12
  );
15
13
  ```
16
14
  っていう関数 `replaceAddress(str)` を作っておけば
@@ -26,4 +24,7 @@
26
24
  は、以下を出力します。
27
25
 
28
26
  > "新宿区西新宿2丁目8番1号" "新宿区西新宿2-8-1"
29
- "新宿区西新宿2丁目8番" "新宿区西新宿2-8"
27
+ "新宿区西新宿2丁目8番" "新宿区西新宿2-8"
28
+
29
+
30
+ ???? [CodePenで動作確認](https://codepen.io/kilesa/pen/bGreaJB?editors=0012)