1. 程式人生 > >js正則和replace講解補充

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;