質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.46%
Node.js

Node.jsとはGoogleのV8 JavaScriptエンジンを使用しているサーバーサイドのイベント駆動型プログラムです。

TypeScript

TypeScriptは、マイクロソフトによって開発された フリーでオープンソースのプログラミング言語です。 TypeScriptは、JavaScriptの構文の拡張であるので、既存の JavaScriptのコードにわずかな修正を加えれば動作します。

Q&A

解決済

3回答

4111閲覧

○丁目○番地○号をハイフンにうまく変換したい

yuki_90453

総合スコア326

Node.js

Node.jsとはGoogleのV8 JavaScriptエンジンを使用しているサーバーサイドのイベント駆動型プログラムです。

TypeScript

TypeScriptは、マイクロソフトによって開発された フリーでオープンソースのプログラミング言語です。 TypeScriptは、JavaScriptの構文の拡張であるので、既存の JavaScriptのコードにわずかな修正を加えれば動作します。

0グッド

0クリップ

投稿2021/10/19 07:51

編集2021/10/19 07:53

#概要
新宿区西新宿2丁目8番1号という住所を新宿区西新宿2-8-1と感じに変換したいです。
こちらの住所であれば下記のようにreplaceで変換できますが、もし住所の最後が「西新宿2丁目8番」で終わっていた場合、「新宿区西新宿2-8-」になってしまいます。

const samepleAdress = '新宿区西新宿2丁目8番1号' .replace('丁目','-') .replace('番地','-') .replace('号','')

#質問
1)
最後に「号」がない場合、「新宿区西新宿2-8-」という形になってしまいます。
最後をハイフンで終わらせない方法を教えて下さい。

○丁目○番地○号をうまく変換する方法はないでしょうか?
その他、紹介されている記事があれば教えて下さい。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答3

0

ベストアンサー

「なんかいかにも正規表現(だったりreplaceだったり)を使いこなせてる風」なコードにしたいの?
であれば、replace()

  • 第1引数に渡す正規表現で、丸かっこ(キャプチャ)を使う。
  • 第2引数には関数を渡せる。

っていうのを使えば、こんなのができるぞなもし。

javascript

1const replaceAddress = str => str.replace( 2 /(\d+)丁目(\d+)番((\d+)号)?/, 3 (_, p1, p2, p3, p4) => (p3 ? [p1, p2, p4] : [p1, p2]).join('-') 4);

っていう関数 replaceAddress(str) を作っておけば

javascript

1[ 2 '新宿区西新宿2丁目8番1号', 3 '新宿区西新宿2丁目8番' 4].forEach(adr => { 5 console.log(adr, replaceAddress(adr)); 6});

は、以下を出力します。

"新宿区西新宿2丁目8番1号" "新宿区西新宿2-8-1"

"新宿区西新宿2丁目8番" "新宿区西新宿2-8"

???? CodePenで動作確認

投稿2021/10/19 10:53

編集2021/10/19 17:28
退会済みユーザー

退会済みユーザー

総合スコア0

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

xx丁目yy番zz号
xx丁目yy番地zz号
xx丁目yy番
xx丁目yy番地
あたり対応できれば良いのであれば下記でしょうか。

js

1const samepleAdress = '新宿区西新宿2丁目8番1号' 2 .replace(/(.+)丁目(.+?)番地?((.+?)号)?$/, '$1-$2-$4') 3 .replace(/-$/, '')

実際はxx丁目がない住所や、堺市の様にxx丁と表記するような都市もありますし、
他にも考慮すべき点はあるかもしれません。

投稿2021/10/19 09:57

Eggpan

総合スコア2810

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

YT0014

2021/10/19 10:32

港区麻布十番四丁目四番九号(麻布十番駅)という住所が実在しますので、全国に完全対応が必要ならば、丁番号などの含まれる地名の確認も検討する必要があるかも。
退会済みユーザー

退会済みユーザー

2021/10/19 10:59

そろそろ風も冷たくなってきたこの季節、麻布十番といえば「あべちゃん」のもつ煮込みを食べたくなりますね。
guest

0

末尾「-」だったら削ればいいだけじゃない?

Trim specific character from a string

投稿2021/10/19 08:01

gentaro

総合スコア8949

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.46%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問