前提
JavaScriptで21文字以上かつ特定の条件を満たしたときに住所を分割する機能を作っています。
ただ、特定のパターンの時の分割が上手くいっていないです。
トランスパイルする前のコードはcoffeescriptですが、
JSの方が回答が付きやすいと判断し今のタグです。
実現したいこと
(例)北海道新市豊平区月寒西三条6丁目1-四十一707
の住所が入力されている時、
分割1 =北海道新市豊平区月寒西三条
分割2 = 6丁目1-四十一
のようにしたいが現在は、
分割1 = 北海道新市豊平区月寒西三条6丁目1-四十一707
分割2 = 707
になっています。
該当のソースコード
JavaScript
1 2 住所を分割する = (function(_super) { 3 __extends(Adjust住所を分割する, _super); 4 5 function Adjust住所を分割する(request, address) { 6 var exclusions; 7 exclusions = []; 8 Adjust住所を分割する.__super__.constructor.call(this, request, address, exclusions, null); 9 this.proof = function(direction, callback) { 10 var addressIndex, maxLength, pattern1, pattern1_2, pattern2, pattern2_2, pattern3, pattern3_2, pattern4, pattern4_2, pattern5, pattern5_2, proposal; 11 maxLength = 21; 12 proposal = { 13 kind: "info", 14 title: "住所を分割しました。", 15 description: "" + maxLength + "文字を越えていたので分割しました。", 16 columns: [] 17 }; 18 pattern1 = /[0-90-9〇一二三四五六七八九]{1,}(、|.|・|?|||ー|丁目|-)[0-90-9〇一二三四五六七八九]{1,}(、|.|・|?|||ー|-|番)[0-90-9〇一二三四五六七八九]{1,}(、|.|・|?|||ー|-|号)[0-90-9〇一二三四五六七八九]{1,}(、|.|・|?|||ー|-)[0-90-9〇一二三四五六七八九]{1,}.*/g; 19 pattern2 = /[0-90-9〇一二三四五六七八九]{1,}(、|.|・|?|||ー|丁目|-)[0-90-9〇一二三四五六七八九]{1,}(、|.|・|?|||ー|-|番)[0-90-9〇一二三四五六七八九]{1,}(、|.|・|?|||ー|-|号)[0-90-9〇一二三四五六七八九]{1,}.*/g; 20 pattern3 = /[0-90-9〇一二三四五六七八九]{1,}(、|.|・|?|||ー|丁目|-)[0-90-9〇一二三四五六七八九]{1,}(、|.|・|?|||ー|-|番)[0-90-9〇一二三四五六七八九]{1,}.*/g; 21 pattern4 = /[0-90-9〇一二三四五六七八九]{1,}(、|.|・|?|||ー|丁目|-)[0-90-9〇一二三四五六七八九]{1,}.*/g; 22 pattern5 = /[0-90-9〇一二三四五六七八九]{3,}.*/; 23 pattern1_2 = /^[0-90-9〇一二三四五六七八九]{1,}(、|.|・|?|||ー|丁目|-)[0-90-9〇一二三四五六七八九]{1,}(、|.|・|?|||ー|-|番)[0-90-9〇一二三四五六七八九]{1,}(、|.|・|?|||ー|-|号)[0-90-9〇一二三四五六七八九]{1,}(、|.|・|?|||ー|-)[0-90-9〇一二三四五六七八九]{1,}/g; 24 pattern2_2 = /^[0-90-9〇一二三四五六七八九]{1,}(、|.|・|?|||ー|丁目|-)[0-90-9〇一二三四五六七八九]{1,}(、|.|・|?|||ー|-|番)[0-90-9〇一二三四五六七八九]{1,}(、|.|・|?|||ー|-|号)[0-90-9〇一二三四五六七八九]{1,}/g; 25 pattern3_2 = /^[0-90-9〇一二三四五六七八九]{1,}(、|.|・|?|||ー|丁目|-)[0-90-9〇一二三四五六七八九]{1,}(、|.|・|?|||ー|-|番)[0-90-9〇一二三四五六七八九]{1,}/g; 26 pattern4_2 = /^[0-90-9〇一二三四五六七八九]{1,}(、|.|・|?|||ー|丁目|-)[0-90-9〇一二三四五六七八九]{1,}/g; 27 pattern5_2 = /^[0-90-9〇一二三四五六七八九]{3,}/; 28 addressIndex = -1; 29 return async.eachSeries(direction.addresses, function(address, addressNext) { 30 var firstLine, matchValue, matchs1, matchs2, matchs3, matchs4, matchs5, moreMatchValue, moreMatchs, newLines, oldLines, secondLine; 31 addressIndex++; 32 newLines = []; 33 oldLines = deepcopy(address.lines); 34 if (oldLines.length > 0 && oldLines[0].length >= maxLength && (oldLines.length === 1 || (oldLines.length > 1 && oldLines[1].length === 0))) { 35 firstLine = oldLines[0]; 36 secondLine = ""; 37 matchs1 = firstLine.match(pattern1); 38 matchs2 = firstLine.match(pattern2); 39 matchs3 = firstLine.match(pattern3); 40 matchs4 = firstLine.match(pattern4); 41 matchs5 = firstLine.match(pattern5); 42 matchValue = ""; 43 if (matchs1 != null) { 44 matchValue = matchs1.join(""); 45 moreMatchs = matchValue.match(pattern1_2); 46 } else if (matchs2 != null) { 47 matchValue = matchs2.join(""); 48 moreMatchs = matchValue.match(pattern2_2); 49 } else if (matchs3 != null) { 50 matchValue = matchs3.join(""); 51 moreMatchs = matchValue.match(pattern3_2); 52 } else if (matchs4 != null) { 53 matchValue = matchs4.join(""); 54 moreMatchs = matchValue.match(pattern4_2); 55 } else if (matchs5 != null) { 56 matchValue = matchs5.join(""); 57 moreMatchs = matchValue.match(pattern5_2); 58 } 59 console.log("matchValue: " + matchValue); 60 if (matchValue.length > 0) { 61 firstLine = firstLine.replace(matchValue, ""); 62 secondLine = matchValue; 63 if (moreMatchs != null) { 64 moreMatchValue = moreMatchs.join(""); 65 console.log("moreMatchValue: " + moreMatchValue); 66 if (matchValue !== moreMatchValue && (matchValue.length - moreMatchValue.length) > 2) { 67 firstLine = firstLine.replace(matchValue, ""); 68 firstLine = "" + firstLine + moreMatchValue; 69 secondLine = matchValue.replace(moreMatchValue, ""); 70 } 71 } 72 if (!secondLine.match("^(、|.|・|?|||ー|丁目|番地|号|-)")) { 73 newLines.push(firstLine); 74 newLines.push(secondLine); 75 } 76 } 77 if (newLines.length > 0) { 78 address.lines = newLines; 79 proposal.columns.push({ 80 paths: [ 81 { 82 key: "addresses", 83 index: addressIndex 84 }, { 85 key: "lines", 86 index: 0 87 } 88 ], 89 values: { 90 old: oldLines[0], 91 "new": newLines[0] 92 }, 93 matchs: [] 94 }); 95 proposal.columns.push({ 96 paths: [ 97 { 98 key: "addresses", 99 index: addressIndex 100 }, { 101 key: "lines", 102 index: 1 103 } 104 ], 105 values: { 106 old: oldLines[1], 107 "new": newLines[1] 108 }, 109 matchs: [] 110 }); 111 } 112 } 113 return addressNext(); 114 }, function(err) { 115 if (proposal.columns.length === 0) { 116 proposal = null; 117 } else { 118 proposal.direction_key = direction.key; 119 } 120 return callback(err, proposal); 121 }); 122 }; 123 } 124
追記
やり方が間違っているかも知れませんが、
[0-90-9〇一二三四五六七八九]を
[0-90-9〇一二三四五六七八九十」にしましたが、
北海道新市豊平区月寒西三条6刀丁目1-四十一707
が
北海道新市豊平区月寒西三条6刀丁目1-四十一
707
で分割されてしまいます。。
回答1件
あなたの回答
tips
プレビュー