我想编写一个正则表达式,使其匹配仅包含一个元音的单词列表中的所有9个字母的单词;例如“优势”。
我取得的最好成绩是:
^(([^aeiou]{8}[aeiou])|
([^aeiou]{7}[aeiou][^aeiou]{1})|
([^aeiou]{6}[aeiou][^aeiou]{2})|
([^aeiou]{5}[aeiou][^aeiou]{3})|
([^aeiou]{4}[aeiou][^aeiou]{4})|
([^aeiou]{3}[aeiou][^aeiou]{5})|
([^aeiou]{2}[aeiou][^aeiou]{6})|
([^aeiou]{1}[aeiou][^aeiou]{7})|
([aeiou][^aeiou]{8}))$
(添加了换行符以提高可读性)。这可行,但是有一种方法可以使用更通用的模式来做到这一点,例如:
^[^aeiou]*[aeiou][^aeiou]*$
通过某种方式添加“如果长度不为9则失败”条件?
答案 0 :(得分:3)
使用前瞻性来限制长度并仅接受字母:
^(?=[a-z]{9}$)[^aeiou]*[aeiou][^aeiou]*$
答案 1 :(得分:1)
您可以使用
^(?=.{9}$)[b-df-hj-np-tv-z]*[aeiou][b-df-hj-np-tv-z]*$
请参见regex demo。添加不区分大小写的标志以匹配大写字母。
*详细信息
^
-字符串的开头(?=.{9}$)
-一个确保字符串包含9个字符的正向超前(否则,匹配失败)[b-df-hj-np-tv-z]*
-超过0个辅音[aeiou]
-元音[b-df-hj-np-tv-z]*
-超过0个辅音$
-字符串的结尾。答案 2 :(得分:-1)
以某种方式添加“如果长度不为9则失败”条件吗?”
最好的方法是不使用regex
检查字符串长度。
使用您用来检查字符串长度的语言提供的功能,然后使用regex
来检查它是否仅包含可接受的字符并且包括一个摆动。
JavaScript中的一个简单示例(用其他任何语言重写它都是一件容易的事):
var input = 'some input string';
if (input.length == 9 && input.match(/[aeiou]/)) {
console.log('Valid input (length is 9 and contains at least one wovel)');
} else {
console.log('Invalid input');
}