字符串拆分姓名电话省市区逻辑

最新开发需要把一段文字拆分;自己写了一个例子;有需要的看看,下面是一部分逻辑说明和部分代码;需要的可以留下评论,代码只是大部分,发现有问题的,请评论,谢谢

把特殊字符+换行+回车等字符置空

一、 用户可能输入顺序组合

① 张三18300000000广东省广州市天河区林和中路

② 张三广东省广州市天河区林和中路路18300000000

③ 18300000000张三广东省广州市天河区林和中路

④ 18300000000广东省广州市天河区林和中路号张三

⑤ 广东省广州市天河区林和中路路18300000000张三

⑥ 广东省广州市天河区林和中路路张三18300000000

⑦ 省市区输入:

广东省广州市天河区林和中路

广东广州天河林和中路

广州市天河区林和中路

广州天河林和中路

二、针对以上结果按正则截取手机或固话;处理后的组合

① 姓名+省市区+详细地址

② 省市区+详细地址+姓名

省市区数据拆分

1、有省份:

(姓名)省+++详细地址(姓名)

(姓名)省++详细地址(姓名)

2、无省份,往上查找省份

        (姓名)市++详细地址(姓名)

        (姓名)市+详细地址(姓名)

三、 姓名拆分

① 省市区前面有数据:截取省份前面的数据填充到姓名

② 姓名在详细地址后面:从倒数第一个字开始匹配百家姓数据,在第二或小于20 位找到姓氏; 截取名字,剩下的为详细地址

 // 检索省市区
    addrMatch (str) {
      let proviceArray
      let cityArray
      let countyArray
      let provice = ''
      let city = ''
      let county = ''
      let proviceCode = ''
      let cityCode = ''
      let countyCode = ''
      let address = '' 
      let nametem='' 
      let addresstemp=''
      let nameStr=''
      proviceArray = this.addressInfo
      for (let i = 0; i < proviceArray.length; i++) {
        if (str.indexOf(proviceArray[i].name.substring(0, 2)) > -1) { // 检索到省
          provice = proviceArray[i].name
          proviceCode = proviceArray[i].id
          nametem = str.substring(0,str.indexOf(proviceArray[i].name.substring(0, 2)))  // 获取省前的字符判断  不用 lastIndexOf 防止 有这样名字 张广东广东省
          cityArray = proviceArray[i].child
          for (let j = 0; j < cityArray.length; j++) {
            if (str.indexOf(cityArray[j].name.substring(0, 2)) > -1) {
              city = cityArray[j].name
              cityCode = cityArray[j].id
              countyArray = cityArray[j].child
              if (countyArray&&countyArray.length>0) { //有区级编码
                for (let x = 0; x < countyArray.length; x++) {
                  if (str.indexOf(countyArray[x].name.substring(0, 2)) > -1) {
                    county = countyArray[x].name
                    countyCode = countyArray[x].id
                    addresstemp = str.substring(str.indexOf(county) + county.length, str.length)
                    // break 
                  }
                }
              }else{
                addresstemp = str.substring(str.indexOf(city) + city.length, str.length)
              }
            } else {
              countyArray = cityArray[j].child
              if (countyArray&&countyArray.length>0) {
                for (let x = 0; x < countyArray.length; x++) {
                  if (str.indexOf(countyArray[x].name.substring(0, 2)) > -1) {
                    county = countyArray[x].name
                    countyCode = countyArray[x].id
                    addresstemp = str.substring(str.indexOf(county) + county.length, str.length)
                    if (city == '') {
                      city = cityArray[j].name
                      cityCode = cityArray[j].id
                    }
                    // break 
                  }
                }
              }
            }
          }
          break;
        } else { // 没有检索到省
          cityArray = proviceArray[i].child
          for (let j = 0; j < cityArray.length; j++) {
            if (str.indexOf(cityArray[j].name.substring(0, 2)) > -1) {
              city = cityArray[j].name
              cityCode = cityArray[j].id
              provice = proviceArray[i].name
              proviceCode = proviceArray[i].id
              nametem = str.substring(0,str.lastIndexOf(cityArray[j].name.substring(0, 2)))  // 获取省前的字符判断
              console.log(nametem)
              countyArray = cityArray[j].child
              if (countyArray&&countyArray.length>0) {
                for (let x = 0; x < countyArray.length; x++) {
                  if (str.indexOf(countyArray[x].name.substring(0, 2)) > -1) {
                    county = countyArray[x].name
                    countyCode = countyArray[x].id
                    addresstemp = str.substring(str.indexOf(county) + county.length, str.length)
                    break 
                  }
                }
              }else{
                addresstemp = str.substring(str.indexOf(city) + city.length, str.length)
              }
            }
          }
        }
      }
      if(!nametem){     //nametem 字符串在名字前的字段 ,如果有值,则认为是名字
        var surname = "赵钱孙李周吴郑王冯陈褚卫蒋沈韩杨朱秦尤许何吕施张孔曹严华金魏陶姜戚谢邹喻柏水窦章云苏潘葛奚范彭郎鲁韦昌马苗凤花方俞任袁柳酆鲍史唐费廉岑薛雷贺倪汤 滕殷罗毕郝邬安常乐于时傅皮卞齐康伍余元卜顾孟平黄和穆萧尹姚邵堪汪祁毛禹狄米贝明臧计伏成戴谈宋茅庞熊纪舒屈项祝董粱杜阮蓝闵席季麻强贾路娄危江童颜郭 梅盛林刁钟徐邱骆高夏蔡田樊胡凌霍虞万支柯咎管卢莫经房裘缪干解应宗宣丁贲邓郁单杭洪包诸左石崔吉钮龚程嵇邢滑裴陆荣翁荀羊於惠甄魏加封芮羿储靳汲邴糜松 井段富巫乌焦巴弓牧隗山谷车侯宓蓬全郗班仰秋仲伊宫宁仇栾暴甘钭厉戎祖武符刘姜詹束龙叶幸司韶郜黎蓟薄印宿白怀蒲台从鄂索咸籍赖卓蔺屠蒙池乔阴郁胥能苍双 闻莘党翟谭贡劳逄姬申扶堵冉宰郦雍郤璩桑桂濮牛寿通边扈燕冀郏浦尚农温别庄晏柴瞿阎充慕连茹习宦艾鱼容向古易慎戈廖庚终暨居衡步都耿满弘匡国文寇广禄阙东覃 殴殳沃利蔚越夔隆师巩厍聂晁勾敖融冷訾辛阚那简饶空曾毋沙乜养鞠须丰巢关蒯相查后江红游竺权逯盖益桓公万俟司马上官欧阳夏侯诸葛闻人东方赫连皇甫尉迟公羊 澹台公冶宗政濮阳淳于仲孙太叔申屠公孙乐正轩辕令狐钟离闾丘长孙慕容鲜于宇文司徒司空亓官司寇仉督子车颛孙端木巫马公西漆雕乐正壤驷公良拓拔夹谷宰父谷粱 晋楚闫法汝鄢涂钦段干百里东郭南门呼延妫海羊舌微生岳帅缑亢况後有琴梁丘左丘东门西门商牟佘佴伯赏南宫墨哈谯笪年爱阳佟第五言福"
        let na=''
        var strArray = surname.split("");
                    for(var i=addresstemp.length-1;i > 0;i--){
                        if(strArray.indexOf(addresstemp[i]) != -1){
              na = addresstemp.substring(i);
              if(na){
                 if(na.length>=2 && na.length<=20){
                   nameStr=na
                   address=addresstemp.substring(0,i);
                   break // 找到当前值;退出循环
                 }
              } 
          }
        }
      }else{
        nameStr=nametem
        address=addresstemp
      }
      console.log(provice);
      console.log(city);
      console.log(county);
      console.log(proviceCode);
      console.log(countyCode);
      console.log(address);
      console.log(nameStr);
    },