正規表示式中的零寬斷言相關面試題

2021-08-20 16:17:34 字數 1088 閱讀 2623

一般看到題的時候,我們不要著急做,要先將題分析清楚再開始動筆,省的一開始就錯了,後面怎麼寫都不會正確的。

這道題的關鍵是:長度8-10位、只包含數字和字母

所以分析一下:長度8-10,包含數字,包含字母,只能是數字和字母(也可以反向思考,不全是字母,也不全是數字,只能為數字和字母,長度8-10),這是邏輯思考階段。

分析之後,再來開始我們的**實現,就是知識儲備的問題了,用正則實現:

方法一:使用零寬正向先行斷言,正規表示式**如下:

/^(?=.*\d.*)(?=.*[a-za-z].*)[0-9a-za-z]$/.test(str)
寫成校驗函式如下:

function check(str)$/;

return re.test(str);

}

方法二:使用零寬負向先行斷言,正規表示式如下:

/^(?!\d+$)(?![a-za-z]+$)[0-9a-za-z]$/.test(str)
寫成校驗函式如下:

function check(str)$/;

return re.test(str);

}

嗯,可能有的童鞋不知道什麼是斷言,所以現在我們就來補充一下,先講講我們用到的兩個斷言,零寬正向先行斷言和零寬負向先行斷行

(?=)表達正向先行斷言,滿足條件的其他匹配結果才為真,即括號內的表示式匹配整個匹配結果才為真

可以出現在**的任意位置

不占用最終的匹配寬度

(?!) 表達負向先行斷言,滿足非條件的其他匹配結果才為真,即括號內的表示式不匹配整個匹配結果才為真

可以出現在**的任意位置

不占用最終的匹配寬度

零寬斷言

零寬正向先行斷言:(?=exp)匹配exp前面的位置

零寬正向後發斷言:(?<=exp)匹配exp後面的位置

零寬負向先行斷言:(?!exp)匹配後面跟的不是exp的位置

零寬負向後發斷言:(?匹配前面不是exp的位置

面試題、斷言、舉例

正規表示式 零寬斷言

零寬斷言的意思是 匹配寬度為零,滿足一定的條件 斷言 零寬斷言用於查詢在某些內容 但並不包括這些內容 之前或之後的東西,也就是說它們像 b 這樣的錨定作用,用於指定乙個位置,這個位置應該滿足一定的條件 即斷言 因此它們也被稱為零寬斷言。斷言用來宣告乙個應該為真的事實。正規表示式中只有當斷言為真時才會...

正規表示式 零寬斷言

今天在codewars.com做練習,遇到乙個正規表示式相關的題目regex password validation 題目很簡單,對字串進行校驗,規則如下 1.長度至少有6位 2.包含小寫字母 3.包含大寫字母 4.包含數字 5.僅由數字和字母組成 對於2.3.4這3個條件,沒辦法寫在乙個正則裡面,...

正規表示式 零寬斷言

接下來的四個用於查詢在某些內容 但並不包括這些內容 之前或之後的東西,也就是說它們像 b 那樣用於指定乙個位置,這個位置應該滿足一定的條件 斷言 因此它們也被稱為零寬斷言。最好還是拿例子來說明吧 exp 也叫零寬度正 先行斷言,它斷言自身出現的位置的後面能匹配表示式exp 比如 b w ing b ...