JS正則(2)對正則的理解

2022-08-22 19:33:09 字數 2502 閱讀 1682

對正則的理解

一、1.正則的懶惰性:

概念:每一次在exec()中捕獲的時候,只捕獲第一次匹配的內容,而不往下捕獲了,我們把這叫正則的懶惰性,每一次捕獲的開始位置都是從0開始。

解決正則的懶惰性:用修飾符g

正則的例項物件reg上有乙個lastindex屬性 它是正則捕獲的起始位置

2.正則的貪婪性:

每一次匹配都是按照最長的出結果,我們把這種功能叫正則的貪婪性。

解決正則的貪婪性:在元字元後面加?

二、分組捕獲 正則帶() 在數分組的個數時從左往右。

var reg=/(a)(b)/就相當於大正則裡面帶了兩個小正則 第一組是(a),第二組是(b)

1.分組捕獲的作用:

(1)改變優先順序;

(2)分組引用; \1  \2

\2代表和第二個分組出現一模一樣的內容,\1代表和第乙個分組出現一模一樣的內容

reg中的規則是第乙個是乙個分組,且是乙個單詞字元 第二個是個分組 引用要求和第一組一模一樣,第三個是第二個分組且是乙個乙個單詞字元,第四個是乙個分組引用,要求和第二組一模一樣。

(3)分組捕獲;

分組捕獲的前提是正則存在分組,不僅把大正則的內容捕獲到,把小正則的內容也捕獲到。

怎樣解除分組中分組捕獲呢,如果不想捕獲某乙個分組中的內容,在這個分組的前面加上?:就可以了。

三、1.var reg=/./    var reg=/\./

區別:前者代表任意乙個字元 而後者代表這個字串中得有乙個「.」。

2.?的使用:

如果單獨的乙個字元後面帶? var reg=/\d?/     /n?/ 代表乙個或者0個這個字元的出現

如果是量詞+和*,後面帶? 是取消正則的貪婪性(在捕獲階段)

3.捕獲:

(1)普通捕獲 exec()  match()

普通捕獲有懶惰性,給正則新增乙個修飾符g可以解決,match()是將所有捕獲的內容放在乙個陣列中並返回,match()就是對exec的乙個簡單封裝。

(2)分組捕獲 捕獲的方法還是exec()和match()

正則在結構上發生了變化,加()

var reg=/(a)(b)/

exec()和match()在非全域性下分組捕獲是相同的,在捕獲的過程中既捕獲大正則裡的內容也捕獲分組中的內容並都返回。

exec()和match()在全域性下分組捕獲是不一樣的,exec()不變。但是match()只捕獲大正則裡的內容。』

(3)分組捕獲的優勢

a.可以提公升優先順序;

b.可以捕獲引用;

\1代表分組1裡面的內容  \2代表分組2裡面的內容

前提是分組必須在引用之前,如果\2在分組的前面代表普通的表示式???

分組的結果存在正則類regexp的$number屬性下。

\1和regexp.$1二者都是分組引用;

\1只能使用在正規表示式裡面,而regexp.1可以外面使用。都是在捕獲完成的條件下。

(4)在捕獲的過程中怎樣取消捕獲分組中的內

在分組前面加上?:就ok了

?:和?=的區別

?:取消捕獲分組中的內容

4.replace()細說

replace()是字串的乙個方法,他有兩個引數,用後者將前者替換掉,並返回乙個新的字串,但沒有改變原來的字串。

(1)如果第乙個引數是字串,只改變一次;

(2)如果第乙個引數是正則『捕獲一次改變一次』

(3)如果第二個引數是匿名函式,每捕獲一次這個匿名函式就會執行一次,return的是什麼,那就替換成什麼。這個匿名函式的arguments有三個元素。

String對正則的支援

1.匹配結果 boolean matches string regex 值得注意的是 matches匹配是完全匹配,即測試字串和表示式必須完全一致才返回true,而pattern.compile regex matcher input find 中regex是input的真子集也會返回true。2....

lastIndex對正則結果的影響

今天遇到乙個問題,用正規表示式去檢查同乙個字串時,交替返回true和false。無奈之下,重新翻了翻權威指南,發現罪魁禍首原來是lastindex。可在控制台嘗試下 let reg d g undefined reg.test 1 true reg.test 1 false lastindex在權威...

Java中對正則的相關使用

ps string類中matches split replaceall和replacefirst 4個方法可以使用正則 1 matches方法可以判斷當前的字串是否匹配給定的正規表示式。如果匹配,返回true 2 split方法使用正規表示式來分割字串,並以string陣列的形式返回分割結果 spl...