js如何根据详细地址提取省市区

案例1:广东省肇庆市四会市四会大道南,获取结果是:{ province: '广东省',city: '肇庆市',district: '四会市'}

案例2:上海市黄浦区人民大道200号,获取结果是:{province: "上海市",city: "上海市", district: "黄浦区"}

实现方法:

  1. 正则表达式匹配:通过正则精准识别省、市、区的关键字(如省、市、区、县),适配直辖市等特殊情况。

  2. 处理直辖市:直接匹配直辖市名称,并自动将市级名称与省级同步。

  3. 逐步截取:每提取一级信息后,截取剩余地址继续解析,确保层级准确。

  4. 兼容性:能处理大多数标准格式的国内地址,包括省→市→区或直辖市→区的结构。

// 在methods或工具函数中定义地址解析方法
parseAddress(address) {
    let province = '', city = '', district = '';
    // 处理省份/直辖市
    const provinceMatch = address.match(/^(.*?(省|北京市|天津市|上海市|重庆市))/);
    if (provinceMatch) {
        province = provinceMatch[1];
        address = address.substring(province.length);
        // 如果是直辖市,市级名称与省级相同
        if (province.endsWith('市')) {
            city = province;
        }
    }
    // 处理市级(非直辖市情况)
    if (!city) {
        const cityMatch = address.match(/^(.*?市)/);
        if (cityMatch) {
            city = cityMatch[1];
            address = address.substring(city.length);
        }
    }
    // 处理区/县
    const districtMatch = address.match(/^(.*?[区县市])/);
    if (districtMatch) {
        district = districtMatch[1];
    }
    return { province, city, district };
}

// 解析省市区
const { province, city, district } = this.parseAddress("上海市黄浦区人民大道200号");
打印结果:
{
  province: "上海市",
  city: "上海市",  // 直辖市名称与省级一致
  district: "黄浦区"
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值