我正在尝试编写一个将字符串作为输入并返回字符串数组的函数。输入字符串是由串联在一起的小部分组成的代码。每个部分均由数字和字母组成,并用空格隔开,它们仅以某些方式结束。
每个部分都是这样的:
74a 2b 23d 1P QQ
它仅以以下方式结束:
QQ
Q
或其中与X
混合的另一个3X
或12X
。因此,当我看到这三个部分时,我知道这是该部分的结尾,因此我应该在这之后进行拆分。
split(74a 2b 23d 1P QQ 45b 1111a Q 3X 11a 5c 5X QQ 11a 65e 45b 36X 44a 88a 3a 245b 656c QQ)
应提供以下输出:
[74a 2b 23d 1P QQ, 45b 1111a Q, 3X, 11a 5c 5X, QQ, 11a 65e 45b 36X, 44a 88a 3a 245b 656c QQ]
答案 0 :(得分:1)
您可以使用模式/\s*(.*?(\bQQ?|X))/g
并访问捕获组以使您的比赛没有前导空格。这将使用非贪婪的通配符.*?
,后跟匹配您其中一个结束选项的替代项。
const s = "74a 2b 23d 1P QQ 45b 1111a Q 3X 11a 5c 5X QQ 11a 65e 45b 36X 44a 88a 3a 245b 656c QQ";
const pattern = /\s*(.*?(\bQQ?|X))/g;
const result = [...s.matchAll(pattern)].map(e => e[1]);
console.log(result);