首页 > 解决方案 > 正则表达式非排他组

问题描述

你怎么能用正则表达式得到这个结果?用字面的话来说,我希望每组连续的元音周围都有最多的辅音(向后或向前)。

例子 :

input : alliibaba 

outputs :
[all]
[lliib]
[bab]
[ba]

我试过了 :

[bcdfghjklmnpqrstvwxyz]*[aeiou]+[bcdfghjklmnpqrstvwxyz]*

但它返回不同的组,所以我不知道正则表达式是否可能......

谢谢你的帮助。

标签: javascriptregex

解决方案


您可以将要设为非排他性的正则表达式部分放在环视模式中,以便将搜索缓冲区的该部分留给下一个匹配项。由于您的规则似乎是元音在匹配之间不重叠,而周围的辅音可以重叠,因此您可以将元音后面的辅音分组为先行模式,同时将元音和任何前面的辅音放在另一个捕获组中,然后连接 2 个匹配组成一个字符串输出:

var re = /([bcdfghjklmnpqrstvwxyz]*[aeiou]+)(?=([bcdfghjklmnpqrstvwxyz]*))/g;
var s = 'alliibaba';
var m;

do {
    m = re.exec(s);
    if (m)
        console.log(m[1] + m[2])
} while (m);


推荐阅读