当出现某些特定字符时如何分割字符串

时间:2020-04-21 16:43:50

标签: javascript split

我正在尝试编写一个将字符串作为输入并返回字符串数组的函数。输入字符串是由串联在一起的小部分组成的代码。每个部分均由数字和字母组成,并用空格隔开,它们仅以某些方式结束。

每个部分都是这样的:

74a 2b 23d 1P QQ

它仅以以下方式结束:

QQ Q或其中与X混合的另一个3X12X。因此,当我看到这三个部分时,我知道这是该部分的结尾,因此我应该在这之后进行拆分。

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]

1 个答案:

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

相关问题