Это выражение может помочь вам передать желаемый вывод и не выполнить другие:
^([a-z]+)?(?:[a-z]*a(?:[a-z]*e(?:[a-z]*i(?:[a-z]*o(?:[a-z]*u)))))([a-z]+)?$
Здесь мы можем использовать послойную архитектуру для проверки каждой буквы по порядку, затем мы можем добавить списоксимволов для тех, кого мы хотим иметь за этим.Я только что предположил, что [a-z]
может быть желаемым списком char.
![enter image description here](https://i.stack.imgur.com/6p61h.png)
RegEx
Если это не было вашим желаемым выражением, вы можете изменить / изменить выражения в regex101.com .
RegEx Circuit
Вы также можете визуализировать свои выражения в jex.im :
![enter image description here](https://i.stack.imgur.com/o5gIq.png)
Демонстрация JavaScript для групп захвата
const regex = /^([a-z]+)?(?:[a-z]*a(?:[a-z]*e(?:[a-z]*i(?:[a-z]*o(?:[a-z]*u)))))([a-z]+)?$/gm;
const str = `aeiou
cabeilous
zaaefaifoafua
sacrilegious
jeious
cabeil-ous`;
let m;
while ((m = regex.exec(str)) !== null) {
// This is necessary to avoid infinite loops with zero-width matches
if (m.index === regex.lastIndex) {
regex.lastIndex++;
}
// The result can be accessed through the `m`-variable.
m.forEach((match, groupIndex) => {
console.log(`Found match, group ${groupIndex}: ${match}`);
});
}