正則表達式匹配的誤區及修正
本文探討正則表達式在字符串匹配中的一個常見問題:為什么正則表達式/[1-9]d*$/會將“-1”判定為匹配成功?以及如何修正這個問題。
讓我們分析一下代碼:
function isPositiveInteger(str) { const regex = /[1-9]d*$/; return regex.test(str); } console.log(isPositiveInteger("-1")); // 輸出 true,預期為 false console.log(isPositiveInteger("1")); // 輸出 true
isPositiveInteger函數意圖判斷輸入字符串是否為正整數。然而,它錯誤地將“-1”識別為正整數。
問題在于正則表達式/[1-9]d*$/的結構。它匹配:
- [1-9]:一個1到9之間的數字。
- d*:零個或多個數字(0-9)。
- $:字符串結尾。
當輸入“-1”時,正則表達式只匹配字符串結尾的“1”,滿足[1-9]條件,因此返回true。它忽略了字符串開頭的“-”符號。
為了正確匹配正整數,我們需要確保正則表達式從字符串開頭開始匹配,并且不包含負號。 這可以通過在正則表達式開頭添加^符號來實現,^表示匹配必須從字符串的起始位置開始。 完整的修正后的正則表達式應該是:^[1-9]d*$
修正后的代碼:
function isPositiveInteger(str) { const regex = /^[1-9]d*$/; return regex.test(str); } console.log(isPositiveInteger("-1")); // 輸出 false console.log(isPositiveInteger("1")); // 輸出 true console.log(isPositiveInteger("123")); // 輸出 true console.log(isPositiveInteger("0")); // 輸出 false
現在,isPositiveInteger函數能夠準確判斷正整數,避免了之前的錯誤匹配。 關鍵在于理解正則表達式中^和$錨點的作用,以及它們在確保匹配位置準確性上的重要性。
? 版權聲明
文章版權歸作者所有,未經允許請勿轉載。
THE END