2017-09-24 186 views
1

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

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

樣品輸入:

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

它在哪些情況下失敗? –

+0

[正則表達式匹配第一個和最後一個字符]的可能的副本(https://stackoverflow.com/questions/24340969/regular-expression-to-match-first-and-last-character) – Redu

回答

7

您需要將錨點添加到您的字符串中。

當你有,例如:

aeqwae 

你說的輸出是真實的,但因爲a是不一樣的e它不是有效的。那麼,正則表達式只是匹配前一個字符(在e之前),即a。因此,比賽是有效的。所以,你會得到這樣的:

[aeqwa]e 

用括號括起來的字符串是實際不符,以及爲什麼它返回true

如果你改變你的正則表達式是:

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

通過添加^,你告訴它匹配開始必須是字符串的開始,並通過添加$你告訴它匹配結束必須是字符串的結尾。這樣,如果匹配,整個字符串必須匹配,這意味着aeqwae將不再匹配。

測試正則表達式的好工具是Regex101。試一試!

注意:根據您的輸入,可能需要設置全局(g)或多行(m)標誌。全局標誌使正則表達式在第一次匹配後不會返回。多行標誌使得^$匹配(不是字符串)的開始和結束。我在使用輸入進行測試時使用了它們。

相關問題