最近在做小程序的过程中,有这么一个需求,需要将后台返回的地址,按省市区分割只取【XX区、XX县】部分,于是自己封装了一个方法,经自我测试可以分割所有正确的地址,包括自治区、群岛等;如有更好的建议,愿虚心求教!
思路:
1、先将所有的省进行分割,包括自治区、行政区及市;
2、再将所有的市分割,包括行政区、县、自治州、区、行政区划、盟;
3、最后截取完省市的地址就市县、镇、乡之类的地址了。
最终测试的地址如下图:
代码部分:我是将公共方法封装在了util.js文件里,在需要的页面进行调用的;
//util.js /** * 省市区、自治区分割 */ function getArea(str) { let area = {}; //最终返回的地址 let un_pro_str = ''; //去掉省以后的地址 let un_city_str = ''; //去掉市以后的地址 // 第一个区域(省)截取开始 let _dominion = str.indexOf("自治区"); //自治区出现的位置(内蒙古自治区、广西壮族自治区、西藏自治区、宁夏回族自治区、新疆维吾尔自治区、) let _district = str.indexOf('行政区'); //特别行政区出现的位置(香港特别行政区、澳门特别行政区) let _province = str.indexOf("省"); //省出现的位置 let _city = str.indexOf('市'); //市出现的位置(北京市、天津市、上海市、重庆市) if (_dominion != -1) { //有自治区 area.Province = str.substring(0, _dominion + 3) un_pro_str = str.substr(_dominion + 3); } else if (_province != -1) { //有省 area.Province = str.substring(0, _province + 1) un_pro_str = str.substr(_province + 1); } else if (_district != -1) { //有行政区 area.Province = str.substring(0, _district + 3) un_pro_str = str.substr(_district + 3); } else if (_city != -1) { //有市 area.Province = str.substring(0, _city + 1) un_pro_str = str.substr(_city + 1); } // console.log('去掉省以后的地址', un_pro_str) // 第二个区域(市)截取开始 let _city1 = un_pro_str.indexOf('市'); //第二次出现市的位置 let _district1 = un_pro_str.indexOf('行政区'); //特别行政区出现的位置 let _county = un_pro_str.indexOf('县'); //县出现的位置 let _state = un_pro_str.indexOf('自治州'); //自治州出现的位置 let _region = un_pro_str.indexOf('区'); //区出现的位置 let _zoning = un_pro_str.indexOf('行政区划'); //行政区划出现的位置 let _alliance = un_pro_str.indexOf('盟'); //盟出现的位置 if (_zoning != -1) { //行政区划 area.City = un_pro_str.substring(0, _zoning + 4) un_city_str = un_pro_str.substr(_zoning + 4); } else if (_district1 != -1) { //行政区 area.City = un_pro_str.substring(0, _district1 + 3) un_city_str = un_pro_str.substr(_district1 + 3); } else if (_state != -1) { //自治州 area.City = un_pro_str.substring(0, _state + 3) un_city_str = un_pro_str.substr(_state + 3); } else if (_alliance != -1) { //盟 area.City = un_pro_str.substring(0, _alliance + 1) un_city_str = un_pro_str.substr(_alliance + 1); } else if (_city1 != -1) { //市 area.City = un_pro_str.substring(0, _city1 + 1) un_city_str = un_pro_str.substr(_city1 + 1); } else if (_region != -1) { //区 area.City = un_pro_str.substring(0, _region + 1) un_city_str = un_pro_str.substr(_region + 1); } else if (_county != -1) { //县 area.City = un_pro_str.substring(0, _county + 1) un_city_str = un_pro_str.substr(_county + 1); } // console.log('去掉省市以后的地址', un_city_str) // 去掉省市后,就剩下县了,所以直接赋值 area.Country = un_city_str; return area; } module.exports = { getArea, }
//pages/index/index.js 页面js const util = require('../utils/util.js'); //引入公共方法,路径根据自己的项目填写 page({ /** * 页面的初始数据 */ data: {}, /** * 生命周期函数--监听页面加载 */ onLoad: function(options) { var area = util.getArea('内蒙古自治区呼和浩特市新城区'); var area1 = util.getArea('山西省吕梁市柳林县'); var area2 = util.getArea('上海市上海市普陀区'); var area3 = util.getArea('澳门特别行政区澳门特别行政区澳门半岛'); var area4 = util.getArea('吉林省延边朝鲜族自治州安图县'); var area5 = util.getArea('湖北省恩施市家族苗族自治州恩施市'); var area6 = util.getArea('湖北省省直辖县级行政区划神农架林区'); var area7 = util.getArea('重庆市县忠县'); var area8 = util.getArea('内蒙古自治区阿拉善盟阿拉善右旗'); var area9 = util.getArea('北京市北京市昌平区'); var area10 = util.getArea('台湾省南投县鱼池乡'); var area11 = util.getArea('青海省海西蒙古族藏族自治州大柴旦行政委员会'); var area12 = util.getArea('海南省儋州市华南热作学院'); var area13 = util.getArea('海南省三沙市中沙群岛的岛礁及其海域中沙岛礁'); var area14 = util.getArea('海南省三沙市西沙群岛'); var area15 = util.getArea('广东省中山市火炬开发区'); var area16 = util.getArea('广东省东莞市东莞生态园'); var area17 = util.getArea('广东省东莞市松山湖管委会'); var area18 = util.getArea('广东省东莞市石碣镇'); var area19 = util.getArea('广东省东莞市东城街道'); var area20 = util.getArea('内蒙古自治区包头市达尔罕茂明安联合旗'); var area21 = util.getArea('河北省邢台市南宫市'); var area22 = util.getArea('河北省保定市竞秀区'); } })