正则表达式-一个一个地重复2个字母

我有一个使用某些逻辑生成一些单词的代码,我有正则表达式 1(见下文)。但是我需要生成正确的词,例如词 1。我的逻辑包括我提到的数学模式。我需要正确的模式来生成单词,例如单词 1 而不是 2。模式的逻辑是:

  1. 单词以大写元音或辅音开头
  2. 长度为 2 个或更多符号(整个单词的)
  3. 连续的元音或辅音不应超过两个
Aakemenkyu
Klepathass
Waknampite
Flaetobsak
Oladkinqyt
Mmalinnetj

等等

这些是词 1

[A-Z](([aeiouy]|[bcdfghjklmnpqrstvwxz]){1,2})*

这是正则表达式 1

这个正则表达式不起作用,我的代码逻辑生成了下一个词:

Ijythlzuoe
Tervkpxyib
Ifuemkoeui
Mqjtobojex
Ephyrjiuau

这些是词 2

例如,在单词中Ijythlzuoethl(辅音连续重复 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标志忽略大小写

以上是正则表达式-一个一个地重复2个字母的全部内容。
THE END
分享
二维码
< <上一篇
下一篇>>