我在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, '$& '));
}
胡说叔叔
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
一只萌萌小番薯
TA贡献1795条经验 获得超7个赞
(0?..)(..)*(.)?
这个正则表达式首先选择匹配 0,后面还有 2 个字符,然后匹配尽可能多的长度为 2 的组,然后匹配长度为 1 的可选匹配。然后您可以遍历匹配并添加一个每一个后的空间。
添加回答
举报
0/150
提交
取消