正则表达式匹配指定长度的字符串

时间:2018-07-19 09:49:50

标签: regex

我想编写一个正则表达式,使其匹配仅包含一个元音的单词列表中的所有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则失败”条件?

3 个答案:

答案 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');
}