繁体   English   中英

使用正则表达式匹配字符串的相同开始和结束字符

[英]Match the same start and end character of a string with Regex

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

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

样本输入:

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

您需要在字符串中添加锚点。

当你有,例如:

aeqwae

您说输出为真,但它无效,因为ae 好吧,正则表达式只是匹配前一个字符(在e之前),即a 因此,匹配是有效的。 所以,你得到这个:

[aeqwa]e

括号中的字符串是实际匹配项以及它返回true

如果您将正则表达式更改为:

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

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

测试正则表达式的一个很好的工具是Regex101 试试看!

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

只是一个不同版本的@Hristiyan Dodov 回答,我是为了好玩而写的。

 regex = /^(a|e|i|o|u).*\\1$/ const strings = ['abcde', 'abcda', 'aabcdaa', 'aeqwae', 'ouqweru'] strings.forEach((e)=>{ const result = regex.test(e) console.log(e, result) })

上面已经提到了正确答案,只是为了进一步澄清:

regEx= /^([a,e,i,o,u])(.*)\1$/

这里, \\1是再次匹配相同文本的反向引用,您可以多次重复使用相同的反向引用。 大多数正则表达式支持多达 99 个捕获组和两位数的反向引用。 所以 \\99 是一个有效的反向引用,如果你的正则表达式有 99 个捕获组。 访问详细信息

/^([aeiou])[a-z]\1$/

只是一点点改进,以捕捉字母。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM