输入如下:
0030 0110 0030 0210 0030 0310 0030 0410
0030 0510 0030 0610 0030 0710 0030 0810
我希望输出如下:
00 30 01 10 00 30 02 10 00 30 03 10 00 30 04 10 00 30 05 10 00 30 06 10 00 30 07 10 00 30 08 10
换句话说,我希望输出以一堆两个(十六进制)数字和一行分开。
我试过这个:
const REGEX_FIND_2 = /(\w{2}(?! |\n|\r))|(\n)|(\r)/g;
const REGEX_REPLACE_2 = "$1 ";
奇怪的是,它适用于Sublime Text 3
,但在JavaScript中,它会在行之间添加一个空格,如下所示:
00 30 01 10 00 30 02 10 00 30 03 10 00 30 04 10 00 30 05 10 00 30 06 10 00 30 07 10 00 30 08 10
请注意04 10
和00 30
之间的额外空格。
答案 0 :(得分:2)
您可以使用单个空格重新生成换行符,然后在每对数字之间插入一个空格:
s = s.replace(/[\r\n]+/g, ' ').replace(/(\d{2})(\d{2})/g, "$1 $2");
参见JS演示:
var s = "0030 0110 0030 0210 0030 0310 0030 0410\r\n0030 0510 0030 0610 0030 0710 0030 0810";
console.log(s.replace(/[\r\n]+/g, ' ').replace(/(\d{2})(\d{2})/g, "$1 $2"));
如果您需要确保只影响“全字”4位数字块,请使用字边界:/\b(\d{2})(\d{2})\b/g
。
答案 1 :(得分:0)
您可以尝试这种方法:
需要单次替换操作
const str = `0030 0110 0030 0210 0030 0310 0030 0410
0030 0510 0030 0610 0030 0710 0030 0810`;
const result = str.replace(/(\d{2})(\d{2})(\s+|$)/g,`$1 $2 `);
console.log(result);

答案 2 :(得分:0)
你可以这样做
text.split(' ').join('').split('\n').join('').replace(/(.{2})/g, '$1 ')
答案 3 :(得分:0)
我只有.NET经验,但我会尽力帮助你。
首先,你可以摆脱空白区域:
var s = "0030 0110 0030 0210 0030 0310 0030 0410".replace(" ", "");
这会给你一个没有空格的字符串:
s = "00300110003002100030031000300410"
然后你可以循环遍历字符串字符,并且每两个字符符合你想要的东西(这是使用模数运算符(%)完成的 - 循环的每个其他规则将从模数产生0或1。每当你点击'0',你就会进行第二次传球(并且你有你的字符串)
var 2LengthCh;
var 1LengthCh;
for (var i = 0; i < s.length; i++) {
if (i%2) = 0 {
//this gets hit every second pass
2LengthCh = 1LengthCh + s.charAt(i);
}
else{
//This gets hit every first pass
1LengthCh = s.charAt(i);
}
}