我正在尝试将字符串的开头和结尾字符匹配为相同的元音.我的正则表达式在大多数场景中都有效,但在其他场景中失败了:
var re = /([aeIoU]).*\1/; re.test(str);
样本输入:
> abcde,输出 – false(有效)
> abcda,输出 – true(有效)
> aabcdaa,输出 – 真(有效)
> aeqwae,输出 – true(无效)
> ouqweru,输出 – true(无效)
解决方法
您需要为字符串添加锚点.
当你有,例如:
aeqwae
你说输出是真的,但它无效,因为a与e不同.好吧,正则表达式只是匹配前一个字符(在e之前),这是一个.因此,匹配有效.所以,你得到这个:
[aeqwa]e
括号中的字符串是实际匹配以及返回true的原因.
如果您将正则表达式更改为:
/^([aeIoU]).*\1$/
通过添加^,您可以告诉它匹配的开始必须是字符串的开头,并通过添加$,告诉它匹配的结尾必须是字符串的结尾.这样,如果匹配,则必须匹配整个字符串,这意味着aeqwae将不再匹配.
测试正则表达式的一个很好的工具是Regex101.试一试!
注意:根据您的输入,您可能需要设置全局(g)或多行(m)标志.全局标志阻止正则表达式在第一次匹配后返回.多行标志使^和$匹配行的开头和结尾(不是字符串).在使用您的输入进行测试时,我使用了它们.