2017-09-24 498 views
1

我试图将字符串的开始和结束字符匹配为相同的元音。我正则表达式是工作在大多数情况下,但在其他失败:使用正则表达式匹配字符串的开始和结束字符

var re = /([aeiou]).*\1/; 
re.test(str); 

样品输入:

  • abcde,输出 - 假的(有效)
  • abcda,输出 - 真(有效)
  • aabcdaa,输出 - 真(有效)
  • aeqwae,输出 - 真(无效)
  • ouqweru,输出 - 真(无效)
+0

它在哪些情况下失败? –

+0

[正则表达式匹配第一个和最后一个字符]的可能的副本(https://stackoverflow.com/questions/24340969/regular-expression-to-match-first-and-last-character) – Redu

回答

7

您需要将锚点添加到您的字符串中。

当你有,例如:

aeqwae 

你说的输出是真实的,但因为a是不一样的e它不是有效的。那么,正则表达式只是匹配前一个字符(在e之前),即a。因此,比赛是有效的。所以,你会得到这样的:

[aeqwa]e 

用括号括起来的字符串是实际不符,以及为什么它返回true

如果你改变你的正则表达式是:

/^([aeiou]).*\1$/ 

通过添加^,你告诉它匹配开始必须是字符串的开始,并通过添加$你告诉它匹配结束必须是字符串的结尾。这样,如果匹配,整个字符串必须匹配,这意味着aeqwae将不再匹配。

测试正则表达式的好工具是Regex101。试一试!

注意:根据您的输入,可能需要设置全局(g)或多行(m)标志。全局标志使正则表达式在第一次匹配后不会返回。多行标志使得^$匹配(不是字符串)的开始和结束。我在使用输入进行测试时使用了它们。

相关问题