查找并替换JavaScript

时间:2017-01-09 11:59:14

标签: javascript regex

输入如下:

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 1000 30之间的额外空格。

4 个答案:

答案 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);
 }
}