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;
簡單的正則式及replace理解
var a 135去測試不去測試,測試又測試 a.replace u6d4b u8bd5 g,你好 135去你好不去你好,你好又你好 上文對測試兩字進行替換,使用replace方式時需要對中文進行unicode轉碼 可以用這個 進行得出結果 u6d4b u8bd5 參考這段話 還有str.repla...
replace中的正則
replace 把原有的字元替換成新的字元 var str pku2016pku2017 str str.replace pku pkusoft console.log str pkusoft2016pku2017在不使用正則的情況下,每次執行只能替換乙個字元,每次執行都是從0開始替換,有重複的,無...
正則的捕獲
正則的捕獲 exec,返回的結果是陣列或null 先看個demo var reg d var str hua123hua456 var result reg.exec str console.dir result 123 index 3,input hua123hua456 console.log ...