為什么使用正則表達式 /[1-9]d*$/ 時,-1 會被判定為匹配成功?

為什么使用正則表達式 /[1-9]d*$/ 時,-1 會被判定為匹配成功?

正則表達式匹配的誤區及修正

本文探討正則表達式在字符串匹配中的一個常見問題:為什么正則表達式/[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
喜歡就支持一下吧
點贊9 分享