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

后端 未结 4 743
醉话见心
醉话见心 2021-02-05 02:02

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 = /([aeio         


        
相关标签:
4条回答
  • 2021-02-05 02:31

    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)
    })

    0 讨论(0)
  • 2021-02-05 02:48

    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.

    0 讨论(0)
  • 2021-02-05 02:53

    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

    0 讨论(0)
  • 2021-02-05 02:53
    /^([aeiou])[a-z]\1$/
    

    just a bit of improvement, to catch alphabet letters.

    0 讨论(0)
提交回复
热议问题