【问题标题】:javascript split string at at two different indexesjavascript 在两个不同的索引处拆分字符串
【发布时间】:2013-07-20 04:00:37
【问题描述】:

我有一张 amex I.E. 的信用卡# 371449635398431 我想分成 3 部分 3714 496353 98431 - 有没有一种简单的方法可以通过预定义的索引(在本例中为 4 和 10 ),可能有一个简单的正则表达式函数?

【问题讨论】:

    标签: javascript regex


    【解决方案1】:

    我真的不认为这里需要正则表达式。如果您知道需要拆分的索引,则可以这样做:

    var input = '371449635398431'
    var part1 = input.substr(0, 4);
    var part2 = input.substr(4, 6);
    var part3 = input.substr(10);
    

    但如果正则表达式是必须的,你可以这样做:

    var input = '371449635398431'
    var match = /^(\d{4})(\d{6})(\d{5})$/.exec(input);
    var part1 = match[1];
    var part2 = match[2];
    var part3 = match[3];
    

    要在每个部分之间插入空格,您可以这样做:

    var match = input.substr(0, 4) + ' ' + input.substr(4, 6) + ' ' + input.substr(10);
    

    或者这个:

    var match = [ input.substr(0, 4), input.substr(4, 6), input.substr(10) ].join(' ');
    

    或者这个(灵感来自Arun P Johny's answer):

    var match = /^(\d{4})(\d{6})(\d{5})$/.exec(input).slice(1).join(' ');
    

    或者这个:

    var match = input.replace(/^(\d{4})(\d{6})(\d{5})$/, '$1 $2 $3');
    

    【讨论】:

    • 以正则表达式的方式来做这件事有什么退路吗?如果未列出全部数字,它会失败(正如我所见,它会先查找 4,然后再查找 6,然后再查找 5)。不幸的是,我对正则表达式知之甚少。与没有 ^ 和 $ 相比,它有什么不同? (另外:如果数字被复制/粘贴到字段中,我只是想添加空格并且感觉应该在 1 行上完成。)
    • 哦,还有——有什么办法不抓取原文全文?所以我可以做一个加入('')?使用 Arun 的回答中提到的“splice(1)”似乎有点多余。
    • 主要问题是性能。正则表达式将比直接操作慢。 ^$ 分别是开始和结束锚点。这意味着如果有任何前导/尾随字符,match 将是一个空数组。如果没有足够的字符或有数字以外的字符,正则表达式也会返回一个空数组。使用match.splice(1).join(' ')(或slice(1))是一个很好的解决方案。
    • @p.s.w.g - 除非尝试构建游戏或其他东西,否则性能很少会成为问题。我认为简单易读的代码更重要,除非 OP 恰好每秒处理数千个信用卡号。
    • @tjameson 是的,非常正确。这些方法中的任何一种都没有错(有人可能会提出另一种同样有效的方法)。正则表达式解决方案非常合理,但很多时候我看到在直接字符串操作更简单和可读的情况下使用正则表达式。当然,there's this.
    【解决方案2】:

    试试

    var array = '371449635398431'.match(/(\d{4})(\d{6})(\d{5})/).splice(1)
    

    【讨论】:

      【解决方案3】:

      下面我简化了答案Arun P Johnyp.s.w.g中使用的正则表达式

      '371449635398431'.match(/(.{4})(.{6})(.{5})/).splice(1)
      

      var a = '371449635398431'.match(/(.{4})(.{6})(.{5})/).splice(1);
      
      console.log(a);

      【讨论】:

        【解决方案4】:

        这里我改进了p.s.w.g的答案,使用 slice 代替 substr (input string in s)

        [s.slice(0,4), s.slice(4,10), s.slice(10)]
        

        let s="371449635398431"; 
        let a=[s.slice(0,4), s.slice(4,10), s.slice(10)]
        
        console.log(a);

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2016-07-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多