js正則和replace講解補充
1.var reg=/./與var reg=/\./的區別?
前者代表任意一個字元,
後者代表這個字串中得有一個點
2.?的使用
如果單獨的一個字元後面帶?
代表1個或0個這個字元的出現; 列如: /\d?/
如果量詞+後面帶? 取消正則的貪婪性 在捕獲的階段
3.捕獲:
1.普通捕獲 正則的方法exec() 字串的方法match()
普通捕獲有懶惰性:
給正則新增一個修飾符g,可以解決;
match是將所有捕獲的內容放在一個數組中,並返回,match就是exec()對函式的簡單封裝
2.分組捕獲:還是正則的方法exec() 字串的方法match()
只不過正則結構發生了變化加() (分兩種捕獲,全域性和非全域性)
非全域性 var reg=/(a)(b)/ exec()和match()在非全域性下分組捕獲相同的,分組捕獲在捕獲的過程中,即捕獲大正則的內容,也捕獲分組中的內容,並返回
全域性 var reg=/(a)(b)/g exec()和match()在全域性下的分組捕獲是不一樣的,exec()不變,但是match()只捕獲到大正則的內容:
3.分組的優勢:
1.可以提升優先順序
2.可以捕獲引用
捕獲引用:
\1 代表分組1裡面的內容:
\2 帶標分組2裡面的內容:
分組必須在引用前,如果分組引用在分組前,就是普通的表示式// ???
案例:/((a)(b))/ 第一組:先捕獲大() 第二組:在捕獲小() 第三組:在捕獲小() 總結:分組捕獲:先捕獲大(),在捕獲小()
分組的結果存在正則(RegExp)的$number屬性下:
\1和RegExp.$1二者,都是分組引用;
\1只能使用,在正則表示式裡面,RegExp.$1可以外面使用,都是在捕獲完成的條件下:
4.在捕獲的過程中,怎樣取消捕獲分組內:
在分組的前面加上?:就ok了
?:和?=的區別:
?: 取消捕獲分組的內容
?= 案例 var reg=/a(?=b)/ 捕獲字元a後面緊跟著b,只返回a
replace細說:
replace是字串的一個方法,他又兩個引數,用後者將前者替換掉,並返回新的字串:
不會改變原來的字串;
1.如果第一個引數是字串,只改變一次:
2.如果第一個引數是正則:捕獲一次,改變一次:
字串案例:var st="hello123hello456";
var ss=st.replace("hello","world");
console.log(ss) 返回的結果為:world123hello456
正則的案例:var st="hello123hello456";
var reg=/hello/g
var ss=st.replace(reg,"world")
console.log(ss) 結果為: world123world456
3.如果第二個引數是匿名函式,每次捕獲1次,這個匿名函式就會執行1次:
案例:var st="hello123hello456";
var reg=/hello/g;
var ss=st.replace(reg,function(){
return "world" (這個匿名函式有三個引數,0:"world"要替換的,1:從哪開始,2:"hello123hello456" 原字串)
})
console.log(ss) 返回的結果為:world123world456
如果以後想知道物件有幾個引數就是用:console.log(arguments)
return是什麼就會返回什麼,沒有return就是undefined;