按某些字母拆分字符串同时跳过某些字母

时间:2021-07-20 05:46:48

标签: javascript regex

我写了一些代码来用某些字母分割给定的字符串。代码如下:

let split_by_each_letter_here = "KM";
let re = new RegExp("(?<=[" + split_by_each_letter_here + "])");
let ans = "YGMGPKPDDFLKJJ".split(re);
returns -> [ 'YGM', 'GPK', 'PDDFLK', 'JJ' ]

注意数组中的每个拆分是如何在“K”或“M”处(在 split_by_each_letter_here 中指定)。

我想修改此代码,以便每次在我的字符串中直接跟在一个拆分字母(“K”或“M”)之后的“P”时,该字符串不会拆分。例如:

let str = "YGMGPKPDDFLKJJ";
// the array should be ['YGM', 'GPKPDDFLK', 'JJ'];

请注意,由于第一个 'K' 后紧跟一个 'P',因此字符串 不会在那里分裂。但是,它确实在第二个“K”处分裂,因为 'K' 后面没有'P'。

使用正则表达式可以实现我想要的输出吗?我该怎么做呢? 谢谢!

1 个答案:

答案 0 :(得分:5)

我们可以尝试使用 match 如下:

var input = "YGMGPKPDDFLKJJ";
var matches = input.match(/.+?(?:[KM](?!P)|$)/g);
console.log(matches);

这里是正则表达式模式的解释:

.+?        match all content up to the nearest
(?:
    [KM]   the letters K or M
    (?!P)  which are NOT immediately followed by P
    |      OR
    $      the end of the input (consume everything until the end)
)