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

时间:2019-09-30 13:49:12

标签: javascript regex

我在js中有此代码。它改变了我的输入值。它将删除所有空白,然后在每隔一个字符后添加一个空白。

var value = $(input).val().replace(/(\s)/g, '').replace(/(\d{2})/g, '$1 ');

1234更改为12 34

123456879012 34 56 78 90

该代码运行良好。 我的问题是-我不知道如何排除零,但前提是它排在第一位。

例如,我想要这个

011111更改为011 11 1

0000000更改为000 00 00

01234568790012 34 56 78 90

11100011 10 00

012034000012 03 40 00

输入可以比我的示例更长。 (我将使用更多字符,但现在仅想象数字)

如何编辑我的正则表达式? (我知道不用正则表达式怎么做)

3 个答案:

答案 0 :(得分:3)

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

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

请参见regex demo

详细信息

  • (?:^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, '$& '));
}

答案 1 :(得分:3)

您可以只进行另一种检查,即字符串是否以零开头,以在前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

答案 2 :(得分:1)

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

此正则表达式可以选择首先匹配0,后面再加上2个字符,然后根据需要匹配任意数量的长度为2的组,然后匹配长度为1的可选匹配项。然后可以遍历匹配项并在每个空格后添加一个空格。

Try it here!

相关问题