使用正则表达式匹配字符串的开始和结束字符
问题描述:
我试图将字符串的开始和结束字符匹配为相同的元音。我正则表达式是工作在大多数情况下,但在其他失败:使用正则表达式匹配字符串的开始和结束字符
var re = /([aeiou]).*\1/;
re.test(str);
样品输入:
-
abcde
,输出 - 假的(有效) -
abcda
,输出 - 真(有效) -
aabcdaa
,输出 - 真(有效) -
aeqwae
,输出 - 真(无效) -
ouqweru
,输出 - 真(无效)
答
您需要将锚点添加到您的字符串中。
当你有,例如:
aeqwae
你说的输出是真实的,但因为a
是不一样的e
它不是有效的。那么,正则表达式只是匹配前一个字符(在e
之前),即a
。因此,比赛是有效的。所以,你会得到这样的:
[aeqwa]e
用括号括起来的字符串是实际不符,以及为什么它返回true
。
如果你改变你的正则表达式是:
/^([aeiou]).*\1$/
通过添加^
,你告诉它匹配开始必须是字符串的开始,并通过添加$
你告诉它匹配结束必须是字符串的结尾。这样,如果匹配,整个字符串必须匹配,这意味着aeqwae
将不再匹配。
测试正则表达式的好工具是Regex101。试一试!
注意:根据您的输入,可能需要设置全局(g)或多行(m)标志。全局标志使正则表达式在第一次匹配后不会返回。多行标志使得^
和$
匹配行(不是字符串)的开始和结束。我在使用输入进行测试时使用了它们。
它在哪些情况下失败? –
[正则表达式匹配第一个和最后一个字符]的可能的副本(https://*.com/questions/24340969/regular-expression-to-match-first-and-last-character) – Redu