この記事は
- 住所文字列から番地以下を除去して都道府県市区町村のみにしたメモです
コード
- いきなりですが結論です
shrink_address.js
function shrinkAddress(address){
// nullは空文字で返却
if(!address) return ""
// 番地っぽい文字列を抽出する正規表現
let pattern = /([0-90-9]+|[一二三四五六七八九十百千万]+)*(([0-90-9]+|[一二三四五六七八九十百千万]+)|(丁目|丁|番地|番|号|-|‐|ー|−|の|東|西|南|北){1,2})*(([0-90-9]+|[一二三四五六七八九十百千万]}+)|(丁目|丁|番地|番|号){1,2})/
let result = address.match(pattern)
// マッチしたら番地よりも前の文字列を返却
if(!!result){
return address.substring(0, result['index'])
} else {
return address
}
}
テスト
- 半角、全角、漢数字、ハイフン、丁目などに耐久しています
- 地名に漢数字が混じっていても大丈夫でした
shrinkAddress("東京都中央区銀座1-2-3")
"東京都中央区銀座"
shrinkAddress("東京都中央区銀座1−2−3")
"東京都中央区銀座"
shrinkAddress("東京都中央区銀座1の2の3")
"東京都中央区銀座"
shrinkAddress("東京都中央区銀座一丁目二番三号")
"東京都中央区銀座"
shrinkAddress("東京都北区十条1-2-3")
"東京都北区十条"
shrinkAddress("高知県四万十市中村1-2-3ハイツ高知102")
"高知県四万十市中村"
参照
- 下記記事をものすごく参考にしましたので、正規表現の詳細はこちらの解説をご参照していただければと
- Rubyの埋め込み変数は今回は全て展開しています
- https://qiita.com/YSRKEN/items/5371e67950425ace6a73