【发布时间】:2013-07-20 04:00:37
【问题描述】:
我有一张 amex I.E. 的信用卡# 371449635398431 我想分成 3 部分 3714 496353 98431 - 有没有一种简单的方法可以通过预定义的索引(在本例中为 4 和 10 ),可能有一个简单的正则表达式函数?
【问题讨论】:
标签: javascript regex
我有一张 amex I.E. 的信用卡# 371449635398431 我想分成 3 部分 3714 496353 98431 - 有没有一种简单的方法可以通过预定义的索引(在本例中为 4 和 10 ),可能有一个简单的正则表达式函数?
【问题讨论】:
标签: javascript regex
我真的不认为这里需要正则表达式。如果您知道需要拆分的索引,则可以这样做:
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');
【讨论】:
^ 和 $ 分别是开始和结束锚点。这意味着如果有任何前导/尾随字符,match 将是一个空数组。如果没有足够的字符或有数字以外的字符,正则表达式也会返回一个空数组。使用match.splice(1).join(' ')(或slice(1))是一个很好的解决方案。
试试
var array = '371449635398431'.match(/(\d{4})(\d{6})(\d{5})/).splice(1)
【讨论】:
下面我简化了答案Arun P Johny和p.s.w.g中使用的正则表达式
'371449635398431'.match(/(.{4})(.{6})(.{5})/).splice(1)
var a = '371449635398431'.match(/(.{4})(.{6})(.{5})/).splice(1);
console.log(a);
【讨论】:
这里我改进了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);
【讨论】: