天天看點

正規表達式-學習筆記

正規表達式

https://www.w3school.com.cn/jsref/jsref_obj_regexp.asp

補充知識:

轉義字元“\”

\n  回車 換行
\r  行結束符
\t tab
           

多行字元串

正規表達式-學習筆記
  • RegExp 對象

    正規表達式的作用:比對特殊字元或有特殊搭配原則的字元的最佳選項

    兩種建立方式

  1. 直接量
var  reg = /abc/ 
			// 正規表達式bac
           
  1. new RegExp();
var reg = new RegExp("abc");
           

注意:

var reg = /abce/m;

var reg1 = new RegExp(reg); //傳回的是新的一個正規表達式

var reg2 = RegExp(reg); // 不加new傳回的是一個引用

  • 屬性:
  1. i :ignorecase忽視大小寫
  2. g:執行全局比對(查找所有比對而非在找到第一個比對後停止)。
var reg = /ab/g;
        var str = "abababababab";
        //str.match(reg);
        //(6) ["ab", "ab", "ab", "ab", "ab", "ab"]
           
  1. m:多行比對
var reg = /^a/gm;   //  以a為開頭的字元串 “^”
        var str = "abababab\nabab";
        str.match(reg);
        // (2) ["a", "a"]
           
  • 方法:

    reg.test()

    str.math()’

  • 表達式

方括号 :一個 [ ] 是一個表達式,代表1位,裡面是他的區間

[abc] 查找方括号之間的任何字元。

var reg = /[1234567890][1234567890][1234567890]/g
       var str = "123dsviul9745gdh456"
       /*
        str.match(reg)
        (3) ["123", "974", "456"]
       */
       
           

[^]: ^ 放在裡面表示“非”

(red|blue|green) 查找任何指定的選項。

var reg = /(abc|bcd)/g; //第一1位比對abc或bcd
           
  • 元字元
\w 就是word
\w === [0-9A-z_]
\W === [^\w]

\d === [0-9];
\D === [^d];

\s === [\t\n\r\v\f ]
\S === [^s];

\b 單詞邊界
\B 非單詞邊界

\n	查找換行符。
\f	查找換頁符。
\r	查找回車符。
\t	查找制表符。

           
var reg= /\tc/g
var str = "_abc\tcde"
//必需是真是存在的/t
           
\v	查找垂直制表符。

\uxxxx	查找以十六進制數 xxxx 規定的 Unicode 字元。(可以比對漢字)

           
正規表達式-學習筆記

比對所有

var reg= /[\d\D]/g;
           

查找單個字元,除了換行和行結束符。

. ===  [^\r\n]
           
  • 量詞

    n+ {1,}

    n* {0,}

    n? {0,1}

    n{X} {x}

    n{X,Y} {x,y}

    n{X,} {x,}

檢驗一個字元串兩端是否含有數字
var reg = /^\d|\d$/g;

檢驗一個字元串兩端是否都有數字
var reg = /^\d[\s\S]*\d$/g;
           
  • RegExp 對象方法

compile 編譯正規表達式。

exec 檢索字元串中指定的值。傳回找到的值,并确定其位置。

test 檢索字元串中指定的值。傳回 true 或 false。

正規表達式-學習筆記

lastindex :下一個比對的位置

// 比對xxxx
    var reg = /(\w)\1\1\1/g  // \1反向引用,多次比對前面的表達式
    
    // 比對aabb
    var reg = /(\w)\1(\w)\2/g  
           
正規表達式-學習筆記

str.match(reg);

如果表達式中沒有“g”顯示詳細的比對資訊,如上圖所示。如果有“g”隻顯示比對的個數

str.search(reg);

傳回比對的位置,如果沒有比對到就傳回-1

str.replace()

var str = "abcdedfa";
		var reg = /a/g
		str.replace("a","b"); //隻能傳回一個
		str.replace(reg,"b"); //比對所有
           
// 将aabb變為bbaa
		var str = "aabb"
		var reg = /(\w)\1(\w)\2/g  
		console.log(str.replace(reg,'$2$2$1$1'));
		
		console.log(str.replace(reg,function($,$1,$2){
		
		    return $2+$2+$1+$1;
		}));

           

toUpperCase(); //變為大寫

toLowerCase(); //變為小寫

//将-word變為小駝峰式
        var str = "the-first-name"
        var reg = /-(\w)/g
        console.log(str.replace(reg,function($,$1){
            return $1.toUpperCase();
        }))
           

正向欲查 正向斷言

//正向欲查 正向斷言
        var str = "abaaaa";
        var reg = /a(?=b)/g //篩選出a之後有b的那個a
         var reg = /a(?!b)/g //篩選出a之後沒有b的那個a
        //str.match(reg)   ["a"]
           

在“+”……之後加上“?”就變成了非貪婪比對

//去重
		var str = "aaaaaaaaaabbbbbccc"
        var reg = /(\w)\1*/g
        console.log(str.replace(reg,"$1"));
           
var str = "100000000" //變為100,000,000
        var reg = /(?=(\B)(\d{3})+$)/g  //(\d{3})+ 三的倍數個
        console.log(str.replace(reg,"."));
           

繼續閱讀