为了账号安全,请及时绑定邮箱和手机立即绑定

每“n”个字符添加空格后,如果第一个字符为零,则不计算

每“n”个字符添加空格后,如果第一个字符为零,则不计算

红颜莎娜 2021-11-04 10:43:48
我在js中有这段代码。它改变了我的输入值。它删除所有空格,然后在每隔一个字符后添加一个空格。var value = $(input).val().replace(/(\s)/g, '').replace(/(\d{2})/g, '$1 ');1234变成12 34或1234568790 进入 12 34 56 78 90该代码运行良好。我的问题是 - 我不知道如何排除零,但前提是它排在第一位。例如我想要这个011111 变成 011 11 10000000 变成 000 00 0001234568790 进入 012 34 56 78 90111000 进入 11 10 00012034000 进入 012 03 40 00输入可以比我的例子更长。(我将使用更多字符,但现在只能想象数字)如何编辑我的正则表达式?(我知道如何在没有正则表达式的情况下做到这一点)
查看完整描述

3 回答

?
海绵宝宝撒

TA贡献1809条经验 获得超8个赞

如果您不必仅验证可以使用的数字的字符串

s.replace(/(?:^0)?.{2}(?!$)/g, '$& ')

请参阅正则表达式演示

细节

  • (?:^0)?-0字符串开头的可选出现

  • .{2} - 除换行符以外的任何 2 个字符

  • (?!$) - 不在字符串的末尾。

$&替换字符串是整个匹配反向引用。

如果您需要先检查字符串,请使用if (/^\d+$/.test(str)) {...}并应用此正则表达式。

JS演示:

var strs = ['1234568790', '012345', '0000000'];

for (var i = 0; i < strs.length; i++) {

  console.log(strs[i].replace(/(?:^0)?\d{2}(?!$)/g, '$& '));

}


查看完整回答
反对 回复 2021-11-04
?
胡说叔叔

TA贡献1804条经验 获得超8个赞

您可以只包含一个替代检查,如果字符串以零开头以在前 3 位数字后拆分,否则拆分为 2 位数字。


let s = '01234568790';

s = s.replace(/\s/g, '').replace(/(^0\d{2}|\d{2})/g, '$1 ');

console.log(s);

// 012 34 56 87 90


查看完整回答
反对 回复 2021-11-04
?
一只萌萌小番薯

TA贡献1795条经验 获得超7个赞

(0?..)(..)*(.)?

这个正则表达式首先选择匹配 0,后面还有 2 个字符,然后匹配尽可能多的长度为 2 的组,然后匹配长度为 1 的可选匹配。然后您可以遍历匹配并添加一个每一个后的空间。


查看完整回答
反对 回复 2021-11-04
  • 3 回答
  • 0 关注
  • 179 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信