簡體   English   中英

使用正則表達式匹配字符串的相同開始和結束字符

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

我試圖將字符串的開始和結束字符匹配為相同的元音。 我的正則表達式適用於大多數情況,但在其他情況下失敗:

var re = /([aeiou]).*\1/;
re.test(str);

樣本輸入:

  • abcde ,輸出 - 假(有效)
  • abcda ,輸出 - 真(有效)
  • aabcdaa ,輸出 - 真(有效)
  • aeqwae ,輸出 - 真(無效)
  • ouqweru ,輸出 - 真(無效)

您需要在字符串中添加錨點。

當你有,例如:

aeqwae

您說輸出為真,但它無效,因為ae 好吧,正則表達式只是匹配前一個字符(在e之前),即a 因此,匹配是有效的。 所以,你得到這個:

[aeqwa]e

括號中的字符串是實際匹配項以及它返回true

如果您將正則表達式更改為:

/^([aeiou]).*\1$/

通過添加^ ,你告訴它匹配的開始必須是字符串的開始,通過添加$你告訴它匹配的結束必須是字符串的結束。 這樣,如果有匹配項,則必須匹配整個字符串,這意味着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) })

上面已經提到了正確答案,只是為了進一步澄清:

regEx= /^([a,e,i,o,u])(.*)\1$/

這里, \\1是再次匹配相同文本的反向引用,您可以多次重復使用相同的反向引用。 大多數正則表達式支持多達 99 個捕獲組和兩位數的反向引用。 所以 \\99 是一個有效的反向引用,如果你的正則表達式有 99 個捕獲組。 訪問詳細信息

/^([aeiou])[a-z]\1$/

只是一點點改進,以捕捉字母。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM