Nes*_*esh 19 javascript regex validation
我正在尝试将字符串的开头和结尾字符匹配为相同的元音.我的正则表达式在大多数场景中都有效,但在其他场景中失败了:
var re = /([aeiou]).*\1/;
re.test(str);
Run Code Online (Sandbox Code Playgroud)
样本输入:
abcde,输出 - 假(有效)abcda,输出 - 真(有效)aabcdaa,输出 - 真(有效)aeqwae,output - true(无效)ouqweru,output - true(无效)Hri*_*dov 44
您需要为字符串添加锚点.
当你有,例如:
aeqwae
Run Code Online (Sandbox Code Playgroud)
你说输出是真的,但它无效,因为a它不一样e.好吧,正则表达式只是匹配前一个字符(之前e),即a.因此,匹配有效.所以,你得到这个:
[aeqwa]e
Run Code Online (Sandbox Code Playgroud)
括号中的字符串是实际匹配以及返回的原因true.
如果您将正则表达式更改为:
/^([aeiou]).*\1$/
Run Code Online (Sandbox Code Playgroud)
通过添加^,您可以告诉它匹配的开始必须是字符串的开头,并通过添加$告诉它匹配的结尾必须是字符串的结尾.这样,如果匹配,则必须匹配整个字符串,这意味着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)
})Run Code Online (Sandbox Code Playgroud)
小智 5
上面已经提到了正确答案,只是为了进一步澄清:
regEx= /^([a,e,i,o,u])(.*)\1$/
Run Code Online (Sandbox Code Playgroud)
这里,\1是再次匹配相同文本的反向引用,您可以多次重复使用相同的反向引用。大多数正则表达式支持多达 99 个捕获组和两位数的反向引用。所以 \99 是一个有效的反向引用,如果你的正则表达式有 99 个捕获组。访问详细信息
| 归档时间: |
|
| 查看次数: |
14374 次 |
| 最近记录: |