我在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 1
0000000
更改为000 00 00
01234568790
到012 34 56 78 90
111000
到11 10 00
012034000
到012 03 40 00
输入可以比我的示例更长。 (我将使用更多字符,但现在仅想象数字)
如何编辑我的正则表达式? (我知道不用正则表达式怎么做)
答案 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的可选匹配项。然后可以遍历匹配项并在每个空格后添加一个空格。