JavaScript正則詳談

學過JavaScript的小夥伴應該都知道正則表達式,它簡直讓我們又愛又恨。
首先正則表達式是什麼?

正則表達式的概念

正則表達式(regular expression)是一個描述字符模式的對象。ECMAScript 的 RegExp 類,表示正則表達式,而 String 和 正則表達式都定義了進行強大的【模式匹配】和【文本檢索】與【替換】的函數。
它可以簡單地操作字符串,並完成一系列的操作,可以省下我們大量的時間和代碼,這邊是我們對它愛了的原因。
例如:如果正常操作字符串,找出字符串中的數字,需要將字符串遍歷,並一一比較每一個字符,將是數字的字符拿出來,比較麻煩;而是用正則表達式只需要一句語句就可以實現。

var arr = str.match(/\d+/g);
//str爲要查找的字符串

正則表達式的創建

說到創建,那肯定就是字面量方式和構造函數方式了,我們學過的數組、對象、字符串等等都是有這兩種方式創建的。

字面量方式:

var reg1 = /hello/ig;

構造函數方式

var reg2 = new RegExp("hello","ig"); 

我們一般常用的是使用字面量創建正則表達式,構造函數創建方式不常用。

正則表達式的使用

正則的方法

test方法:用來檢測字符串是否符合正則的標準

  • 語法:正則.test(字符串)
  • 返回值爲布爾類型
  • test可以檢測字符串是否包含正則表達式的內容
  • 如果檢測字符串是否爲某個字符串,可以在規則前加^,在規則後加$,表示開頭和結尾之間的內容
var str = "abcdefg";
var reg1 = /cd/;
var reg2 = /abcdefgh/;
var reg3 = /^cd$/;
console.log(reg1.test(str));//true
console.log(reg2.test(str));//true
console.log(reg3.test(str));//false

exec :利用正則規則,在字符串之中進行匹配,並把匹配的結果返回回來

  • 語法:正則.exec(字符串)
  • 返回數組[要匹配的字符串,下標,在哪個字符串裏匹配,組]
var str = "abcdefg";
var reg1 = /cd/;
console.log(reg1.test(str));//["cd",index:2,input:"abcdefg",groups:"undefined"]

字符串的方法

search:查找字符串中是否有滿足正則條件的內容,相當於加強版的indexOf

  • 語法:字符串.search(正則)
  • 返回值:有的話返回滿足條件的索引,沒有返回-1
var str = "abcdefg";
var reg1 = /cd/;
var reg2 = /hi/;
console.log(str.search(reg1));//2
console.log(str.search(reg2));//-1

match:在字符串之中匹配符合規則的內容, 然後裝進一個新數組裏

  • 語法:字符串.match(正則)
  • 返回值 :
    如果只匹配了一個內容,那麼返回數組[要匹配的字符串,下標,在哪個字符串裏匹配,組],如果match匹配到了多個內容,那麼這個時候直接返回匹配的字符串
  • g:搜索全局,不加g,match之後搜索一個,效果和exec相同
var str = "abcdefgcdefgcde";
var reg1 = /cd/;
var reg2 = /cd/g;
console.log(str.match(reg1));//["cd",index:2,input:"abcdefg",groups:"undefined"]
console.log(str.match(reg2));["cd","cd","cd"]

replace:是將字符串中滿足正則條件的字符串換掉

  • 語法:字符串.replace(正則,要替換的字符串)
  • 返回值:替換後的字符串
var str = "abcdefgcdefgcde";
var reg1 = /cd/;
var reg2 = /cd/g;
console.log(str.replace(reg1,""));//abefgcdefgcde
console.log(str.replace(reg2,""));//abefgefge
console.log(str.replace(reg2,"*"));//ab*efg*efg*e

正則表達式的組成

元字符

  • 正則表達式元字符是包含特殊含義的字符。它們有一些特殊功能,可以控制匹配模式的方式。
var reg = /[abcdef]/;
  • 無論元字符裏有多少內容,只能表示一位的多種情況
  • 元字符存在簡寫情況,比如/\w/表示數字字母下劃線,相當於/[a-zA-Z0-9_]/
    元字符

限定符

  • 我們又稱之爲量詞,表示數量 限定符
var reg = /[\d]{4,10}/;//表示數字0-9一共4-10位

邊界符

^:表示開頭
$:表示結尾
邊界符是限定字符串的開始和結束的

var reg3 = /^cd$/;//表示從c開始到d結束

特殊符號

特殊符號

標示符

我們又稱之爲修飾符,用來修飾規則
修飾符

正則的應用

常用正則1
常用正則2常用正則3
看到這裏,是不是突然明白了對正則的恨?
正則它可以簡化我的代碼,但是使得邏輯更加緊湊,是不是寫正則寫地頭昏腦漲?
別看它挺複雜,只要我們明白了邏輯,勤加練習,正則還不是得乖乖成爲我們手中的利器?
那麼學好正則,從我做起!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章