正则表达式-一个一个地重复2个字母
我有一个使用某些逻辑生成一些单词的代码,我有正则表达式 1(见下文)。但是我需要生成正确的词,例如词 1。我的逻辑包括我提到的数学模式。我需要正确的模式来生成单词,例如单词 1 而不是 2。模式的逻辑是:
- 单词以大写元音或辅音开头
- 长度为 2 个或更多符号(整个单词的)
- 连续的元音或辅音不应超过两个
Aakemenkyu
Klepathass
Waknampite
Flaetobsak
Oladkinqyt
Mmalinnetj
等等
这些是词 1
[A-Z](([aeiouy]|[bcdfghjklmnpqrstvwxz]){1,2})*
这是正则表达式 1
这个正则表达式不起作用,我的代码逻辑生成了下一个词:
Ijythlzuoe
Tervkpxyib
Ifuemkoeui
Mqjtobojex
Ephyrjiuau
这些是词 2
例如,在单词中Ijythlzuoe有thl(辅音连续重复 3 次)和uoe(元音重复)
请帮忙。
回答
我认为通过“生成”,您实际上想说“匹配”。
您可以使用此正则表达式来验证 1-2 个辅音后跟 1-2 个元音,反之亦然:
/^(([aeiouy]){1,2})?(([bcdfghjklmnpqrstvwxz]){1,2}([aeiouy]){1,2})*(([bcdfghjklmnpqrstvwxz]){1,2})?$/i
/^(([aeiouy]){1,2})?(([bcdfghjklmnpqrstvwxz]){1,2}([aeiouy]){1,2})*(([bcdfghjklmnpqrstvwxz]){1,2})?$/i
使用 JavaScript 的测试用例,但这个正则表达式应该适用于任何语言:
输出:
Aakemenkyu => true
Klepathass => true
Waknampite => true
Flaetobsak => true
Oladkinqyt => true
Mmalinnetj => true
Ijythlzuoe => false
Tervkpxyib => false
Ifuemkoeui => false
Mqjtobojex => false
Ephyrjiuau => false
解释:
^- 字符串开头的锚点(- 第 1 组的开始(可以设为非捕获组(?:...))([aeiouy]){1,2}- 一到两个元音
)?- 第 1 组结束,?使其成为可选(- 第 2 组开始([bcdfghjklmnpqrstvwxz]){1,2}- 一到两个辅音([aeiouy]){1,2}- 一到两个元音
)*- 第 2 组结束,零到多次重复(- 第 3 组开始([bcdfghjklmnpqrstvwxz]){1,2}- 一到两个辅音
)?- 第 3 组结束,?使其成为可选$- 锚在字符串的末尾- 使用
i标志忽略大小写