使用正则表达式将字符串转换为具有不同长度的元素数组

时间:2013-11-14 05:46:37

标签: regex arrays string

我有一个像8305473100342301010102BE7552773845527738451ACAF3D6C8743EC3 0000659A0000000500F107000104FFB50F0C这样的字符串,我需要将整个字符串解析为元素数组,但每个元素可能有不同的大小或长度。我想要的输出可能如下,

Array[0]=83;
Array[1]=05; 
Array[2]=4731003423; 
Array[3]=01; 
Array[4]=01; 
Array[5]=01; 
Array[6]=02; 
Array[7]=BE75; 
Array[8]=52773845; 
Array[9]=52773845; 
Array[10]=1ACAF3D6; 
Array[11]=C8743EC3; 
Array[12]=0000659A; 
Array[13]=00000005; 
Array[14]=00F1; 
Array[15]=07; 
Array[16]=00; 
Array[17]=0104; 
Array[18]=FFB5; 
Array[19]=0F; 
Array[20]=0C;

3 个答案:

答案 0 :(得分:1)

使用\S+作为正则表达式。

  • \S匹配非空格字符。
  • X+x
  • 中的一个匹配

以下是Javascript示例:

> '83 05 4731003423 01 01 01 02 BE75 52773845 52773845 1ACAF3D6 C8743EC3 0000659A 00000005 00F1 07 00 0104 FFB5 0F 0C'.match(/\S+/g)
["83", "05", "4731003423", "01", "01", "01", "02", "BE75", "52773845", "52773845", "1ACAF3D6", "C8743EC3", "0000659A", "00000005", "00F1", "07", "00", "0104", "FFB5", "0F", "0C"]
> '83 AB 0C'.match(/\S+/g)
["83", "AB", "0C"]

> var dynamic_string = '83' + ' ' + 'AAAAAA' + ' ' + 'BEEF';
> dynamic_string.match(/\S+/g)
["83", "AAAAAA", "BEEF"]

<强>更新

使用捕获组:

> var str = '83 05473100342301010102BE7552773845527738451ACAF3D6C8743EC3 0000659A0000000500F107000104FFB50F0C';
> str = str.replace(/\s+/g, '');
> var arr = str.match(/(.{2})(.{2})(.{8})(.{2})(.{2})(.{2})(.{2})(.{4})(.{8})(.{8})(.{8})(.{8})(.{8})(.{8})(.{4})(.{2})(.{2})(.{4})(.{4})(.{2})(.{2})(.{2})/);
"8305473100342301010102BE7552773845527738451ACAF3D6C8743EC3 0000659A0000000500F107000104FFB50F0C"
> arr
["8305473100342301010102BE7552773845527738451ACAF3D6C8743EC3 0000659A0000000500F107000104FFB50", "83", "05", "47310034", "23", "01", "01", "01", "02BE", "75527738", "45527738", "451ACAF3", "D6C8743E", "C3 00006", "59A00000", "0050", "0F", "10", "7000", "104F", "FB", "50", "0C"]
> arr.slice(1)
["83", "05", "47310034", "23", "01", "01", "01", "02BE", "75527738", "45527738", "451ACAF3", "D6C8743E", "C3 00006", "59A00000", "0050", "0F", "10", "7000", "104F", "FB", "50", "0C"]
顺便说一句,正则表达似乎不是这项任务的最佳工具。

例如,在Python中,您可以在没有正则表达式的情况下执行相同的操作:

>>> import struct
>>> s = '83 05473100342301010102BE7552773845527738451ACAF3D6C8743EC3 0000659A0000000500F107000104FFB50F0C'
>>> struct.unpack('2s2s8s2s2s2s2s4s8s8s8s8s8s8s4s2s2s4s4s2s2s2s2s', s)
('83', ' 0', '54731003', '42', '30', '10', '10', '102B', 'E7552773', '84552773', '8451ACAF', '3D6C8743', 'EC3 0000', '659A0000', '0005', '00', 'F1', '0700', '0104', 'FF', 'B5', '0F', '0C')

答案 1 :(得分:0)

Javascript的另一种方式,即正则表达式,将使用Javascript split

"83 05 4731003423 01 01 01 02 BE75 52773845 52773845 1ACAF3D6 C8743EC3 0000659A 00000005 00F1 07 00 0104 FFB5 0F 0C".split(" ");
// returns ["83", "05", "4731003423", "01", "01", "01", "02", "BE75", "52773845", "52773845", "1ACAF3D6", "C8743EC3", "0000659A", "00000005", "00F1", "07", "00", "0104", "FFB5", "0F", "0C"]

答案 2 :(得分:0)

string.split(' ');将为您提供完整的数组