【问题标题】:How to get rid of all characters after dynamic specified position in a Javascript string如何在Javascript字符串中动态指定位置后摆脱所有字符
【发布时间】:2018-04-16 16:24:39
【问题描述】:

给定一个字符串:

address = "Tomorrowland, Orlando, FL 32836, USA"

您将如何删除超过第二个逗号特定长度的所有字符串,以摆脱邮政编码和国家/地区? (输出如下所示)

"Tomorrowland, Orlando, FL"

我知道您可以使用诸如

之类的暴力形式解决方案
for(var i = 0; i<address.length;i++){
    if(address[i] == ','){ 
          var number = i+3; 
    }
    //get rid of everything past address[number]
}

但这似乎不太理想。

【问题讨论】:

    标签: javascript arrays string parsing


    【解决方案1】:

    如果地址中仅有数字出现在 ZipCode 中,您可以使用 JavaScript 中的 RegEx 函数,例如 string.match(regex)

    let address = "Tomorrowland, Orlando, FL 32836, USA"
    
    truncated_addr = address.match(/^\w[^0-9]+/);
    console.log(truncated_addr[0]);

    【讨论】:

      【解决方案2】:

      用空格分割地址并将结果的前三个元素重新连接在一起

      let address = "Tomorrowland, Orlando, FL 32836, USA"
      
      let result = address.split(' ', 3).join(' ');
      
      
      console.log(result)

      【讨论】:

      • Tomorrow land, Orlando, FL 32836, USA 怎么样?假设还有其他城市要测试...
      • @GetOffMyLawn 我假设所有地址都具有相同的结构,是的,这非常限于问题中的字符串。
      【解决方案3】:

      使用正则表达式replace()方法:

      /\s\d.*/g or /\s[0-9]{5}-?[0-9]{0,4}.*/g
      

      / 开始正则表达式

      \s 一个空格

      \d{5} 5 个连续数字

      \D 任何非数字字符

      * 零次或多次

      /结束正则表达式

      g全局标志(第一次匹配后,将一直持续到行尾)

      第二个更详细的版本是您是否有查找代码。

      [0-9]{5} 5 个连续数字。

      -? 表示零或一个连字符

      [0-9]{0,4} 0 到 4 个连续数字

      \D* 任意数量的任意非数字字符。

      replace() 将找到匹配项并将其替换为空 ''(2 个连续引号)。

      演示

      var address0 = "Tomorrowland, Orlando, FL 32836, USA";
      
      var address1 = "Tomorrowland, Orlando, FL 32836-6145, USA";
      
      var str0 = address0.replace(/\s\d{5}\D*/g, '');
      
      var str1 = address1.replace(/\s[0-9]{5}-?[0-9]{0,4}\D*/g, '');
      
      console.log(str0);
      
      console.log(str1);

      【讨论】:

      • 你是说门牌号?给定的字符串没有街道,只有城市、州、邮编和国家/地区。
      • 不一定是街道,有些城市的名称中有数字。这只是需要注意的一点。
      • 可能是这样的:/\s\d{5}.*/gTomorrowland 123rd St., Orlando, FL 32836, USA
      • 这很有趣,2 places in the entire world
      【解决方案4】:

      使用split,限制为 3,然后加入,然后删除尾随的邮政编码

      let addresses = ["Tomorrowland, Orlando, FL 32836, USA", "Tomorrowland 05, Orlando, FL 32836, USA", "Tomorrowland, Orlando, FL 32836, USA, The World"]
      
      addresses.forEach(address => {
        console.log(address.split(',', 3).join(',').replace(/[0-9\-\s]+$/g, ''))
      })

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2018-09-06
        • 2018-10-08
        • 1970-01-01
        • 2020-07-24
        • 1970-01-01
        • 2011-02-27
        • 1970-01-01
        • 2012-11-19
        相关资源
        最近更新 更多