如何在javascript中多次拆分字符串

如何在javascript中多次拆分字符串,javascript,string,Javascript,String,我有一个文本文件,每行是一个字符串 最极端的情况可能如下所示: A01B01C01D100E500F100.00G100.00H100.00 A30 ["", "30"] ["A30", "", "", "", "", "", "", ""] 关于可能性的一些信息: A01B400C62.578D77.297 C62.409D77.222 C62.259D77.113 C62.135D76.975 C62.042D76.815 C61.985D76.638 C61.973D76.52

我有一个文本文件,每行是一个字符串

最极端的情况可能如下所示:

A01B01C01D100E500F100.00G100.00H100.00
A30
["", "30"]
["A30", "",  "",  "", "", "", "", ""]
关于可能性的一些信息:

A01B400C62.578D77.297
C62.409D77.222
C62.259D77.113
C62.135D76.975
C62.042D76.815
C61.985D76.638
C61.973D76.529
A03B10000
A0C62.760 D77.336
A0E3.000
A01F400E0
A01B400E-0.100
  • 每个字符串至少包含一个字母和一个数字
  • 字母后面的数字可以是小数点后的任意位数和位数
  • 这些字母并不总是整齐的
数据的另一个示例:

A01B400C62.578D77.297
C62.409D77.222
C62.259D77.113
C62.135D76.975
C62.042D76.815
C61.985D76.638
C61.973D76.529
A03B10000
A0C62.760 D77.336
A0E3.000
A01F400E0
A01B400E-0.100
我想做的是在每个字母处拆分字符串,并获取所有数字直到下一个字母。结果如下:

A01, B01, C01, D100, E500, F100.00, G100.00, H100.00
我试过很多东西,最接近的就是这个

dicedLine = myLine.split(/[ABCDEFGH]/)
这让我接近我想要的,除了我发现如果你有一个字符串,其中没有一个字母在搜索中,那么结果不是我想要的

例如,这样的一行:

A01B01C01D100E500F100.00G100.00H100.00
A30
["", "30"]
["A30", "",  "",  "", "", "", "", ""]
将给我这样的结果:

A01B01C01D100E500F100.00G100.00H100.00
A30
["", "30"]
["A30", "",  "",  "", "", "", "", ""]
我真正想要的结果如下:

A01B01C01D100E500F100.00G100.00H100.00
A30
["", "30"]
["A30", "",  "",  "", "", "", "", ""]
任何想法都很感激

您可以使用断言特定字符存在,而不实际使用它:

code=[
“A01B400C62.578D77.297”,
“C62.409D77.222”,
“C62.259D77.113”,
“C62.135D76.975”,
“C62.042D76.815”,
“C61.985D76.638”,
“C61.973D76.529”,
“A03B10000”,
“A0C62.760 D77.336”,
“A0E3.000”,
“A01F400E0”,
“A01B400E-0.100”,
];
console.log(code.map(code=>code.split(/*(?=[A-Z])/))您可以使用断言特定字符存在,而不实际使用它:

code=[
“A01B400C62.578D77.297”,
“C62.409D77.222”,
“C62.259D77.113”,
“C62.135D76.975”,
“C62.042D76.815”,
“C61.985D76.638”,
“C61.973D76.529”,
“A03B10000”,
“A0C62.760 D77.336”,
“A0E3.000”,
“A01F400E0”,
“A01B400E-0.100”,
];
console.log(code.map(code=>code.split(/*(?=[A-Z])/))
我真正想要的结果如下:

A01B01C01D100E500F100.00G100.00H100.00
A30
["", "30"]
["A30", "",  "",  "", "", "", "", ""]
[“A30”、“”、“”、“”、“”、“”、“”、“”、“”、“”]

如果对字母进行了排序,则可以通过捕获其自身组中的每个字母+数字来轻松完成,如下所示:

设re=/(A[^A-Z]+)?(B[^A-Z]+)?(C[^A-Z]+)?(D[^A-Z]+)?(E[^A-Z]+)?(F[^A-Z]+)?(G[^A-Z]+)?(H[^A-Z]+)/;
控制台日志(重新执行(“A01B01C01D100E500F100.00G100.00H100.00”)。切片(1);
console.log(re.exec(“C30”).slice(1))
我真正想要的结果如下:

A01B01C01D100E500F100.00G100.00H100.00
A30
["", "30"]
["A30", "",  "",  "", "", "", "", ""]
[“A30”、“”、“”、“”、“”、“”、“”、“”、“”、“”]

如果对字母进行了排序,则可以通过捕获其自身组中的每个字母+数字来轻松完成,如下所示:

设re=/(A[^A-Z]+)?(B[^A-Z]+)?(C[^A-Z]+)?(D[^A-Z]+)?(E[^A-Z]+)?(F[^A-Z]+)?(G[^A-Z]+)?(H[^A-Z]+)/;
控制台日志(重新执行(“A01B01C01D100E500F100.00G100.00H100.00”)。切片(1);

console.log(re.exec(“C30”).slice(1))通过匹配而不是拆分,您可以相当轻松地完成此操作。这是一个简单的正则表达式,因此可能更兼容。请注意,如果没有找到匹配项,它将返回null而不是空数组

var数据=[
‘A01B400C62.578D77.297’,
‘C62.409D77.222’,
‘C62.259D77.113’,
‘C62.135D76.975’,
‘C62.042D76.815’,
‘C61.985D76.638’,
‘C61.973D76.529’,
“A03B10000”,
‘A0C62.760 D77.336’,
‘A0E3.000’,
‘A01F400E0’,
‘A01B400E-0.100’
];
var result=data.map(s=>s.match(/[a-z][^a-z]+/gi));

控制台日志(结果)通过匹配而不是拆分,您可以相当轻松地完成此操作。这是一个简单的正则表达式,因此可能更兼容。请注意,如果没有找到匹配项,它将返回null而不是空数组

var数据=[
‘A01B400C62.578D77.297’,
‘C62.409D77.222’,
‘C62.259D77.113’,
‘C62.135D76.975’,
‘C62.042D76.815’,
‘C61.985D76.638’,
‘C61.973D76.529’,
“A03B10000”,
‘A0C62.760 D77.336’,
‘A0E3.000’,
‘A01F400E0’,
‘A01B400E-0.100’
];
var result=data.map(s=>s.match(/[a-z][^a-z]+/gi));

控制台日志(结果)
“D62.409C77.222”
导致
[“”、“”、“C77.222”、“D62.409”、“”、“”、“”、“”、“”]
?你能说得更具体一点吗?一旦字符串被拆分,顺序就不那么重要了。我正计划使用results.indexOf('X')来根据需要操作数据。但您仍然希望得到类似于
[“A30”、“”、“”、“”、“”、“”、“”、“”、“”、“”、“”、“”、“”、“”、“”、“”]
的结果,而不是
[“A30”]
甚至
设置[“A30”]
。我想要给定的每个字符串的完整“集合”。即使集合只有一个实际值和7个空格。这基本上只是清理数据,以便我可以将其传递给另一个函数并解析出我需要的内容。我不明白。您希望对结果执行indexOf,因此我假设索引对您很重要。但是你说顺序无关紧要,所以我想你对
集合也同样满意。但是你说你也想要空白——如果你对索引不感兴趣,这就没有意义了……那么
“D62.409C77.222”
是否会导致
[,,,“C77.222”,“D62.409”,“”,“”,“”,“”,“”,“”,“”,“”,“”,“”,“”,“”,“”,“”,“”,“代码”]
?你能说得更具体一点吗?一旦字符串被拆分,顺序就不那么重要了。我正计划使用results.indexOf('X')来根据需要操作数据。但您仍然希望得到类似于
[“A30”、“”、“”、“”、“”、“”、“”、“”、“”、“”、“”、“”、“”、“”、“”、“”]
的结果,而不是
[“A30”]
甚至
设置[“A30”]
。我想要给定的每个字符串的完整“集合”。即使集合只有一个实际值和7个空格。这基本上只是清理数据,以便我可以将其传递给另一个函数并解析出我需要的内容。我不明白。您希望对结果执行indexOf,因此我假设索引对您很重要。但是你说顺序无关紧要,所以我想你对
集合也同样满意。但是你说你也想要空白——如果你对指数不感兴趣,那就没有意义了……这就是我要找的正则表达式。工作得很好。那就是我要找的正则表达式。工作得很好。