[英]JS - Positive Look Ahead & End Of Line
為什么第一次測試失敗了?
/^[ab](?=[cd])$/.test('ac') // => false
/^[ab](?=[cd])/.test('ac') // => true
只有字符串'ac','ad','bc'和'bd'才能通過。
沒有其他字符串,如'ac bd'或'acbd'。
但是,使用$
在第一個正則表達式中沒有幫助,而第二個正在傳遞像'acbd'這樣的字符串。
您需要了解前瞻的工作方式。
(?=[cd])$
positive -ahead-ahead檢查以下字符是否與前瞻后的模式匹配(在您的情況下,字符串的結尾)。 字符串的結尾不是c
也不是d
。 因此,沒有匹配。
你需要把$
的先行,使之匹配a
:
^[ab](?=[cd]$)
這個正則表達式應該通過:
/^[ab](?=[cd]$)/.test('ac')
原因
/^[ab](?=[cd])$/.test('ac')
失敗,因為$
(輸入結束)后是不是有a
或b
(有一個字母c
后a
)。
/^[ab](?=[cd])$/.test('ac') // => false
由於您未捕獲c
因此失敗。 Lookahead
是0
寬度斷言。他們不會捕獲任何東西只是斷言。你的字符串匹配失敗,因為你已經啟用了anchors
,因此整個字符串應該匹配。在你的第二種情況下,它會因為沒有$
而獲得部分匹配。
你需要的是什么
^[ab][cd]$
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.