I'm trying to match the start and end character of a string to be the same vowel. My regex is working in most scenarios, but failing in others:
var re = /([aeiou]).*\1/;
re.test(str);
Sample input:
abcde
, output - false (Valid) abcda
, output - true (Valid) aabcdaa
, output - true (Valid) aeqwae
, output - true (Not valid) ouqweru
, output - true (Not valid) You need to add anchors to your string.
When you have, for example:
aeqwae
You say the output is true, but it's not valid because a
is not the same as e
. Well, regex simply matches the previous character (before e
), which is a
. Thus, the match is valid. So, you get this:
[aeqwa]e
The string enclosed in the brackets is the actual match and why it returns true
.
If you change your regex to this:
/^([aeiou]).*\1$/
By adding ^
, you tell it that the start of the match must be the start of the string and by adding $
you tell it that the end of the match must be the end of the string. This way, if there's a match, the whole string must be matched, meaning that aeqwae
will no longer get matched.
A great tool for testing regex is Regex101 . Give it a try!
Note: Depending on your input, you might need to set the global (g) or multi-line (m) flag. The global flag prevents regex from returning after the first match. The multi-line flag makes ^
and $
match the start and end of the line (not the string). I used both of them when testing with your input.
Just a different version of @Hristiyan Dodov answer that I have written for fun.
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) })
Correct answer is already mentioned above, just for some more clarification:
regEx= /^([a,e,i,o,u])(.*)\1$/
Here, \\1
is the backreference to match the same text again, you can reuse the same backreference more than once. Most regex flavors support up to 99 capturing groups and double-digit backreferences. So \\99 is a valid backreference if your regex has 99 capturing groups. visit_for_detail
/^([aeiou])[a-z]\1$/
只是一点点改进,以捕捉字母。
The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.