『JavaScript』正則表達式

本篇博客介紹一些正則表達式相關的語法以及一些字符串的方法。

什麼是正則表達式?


正則表達式(Regular Expression,在代碼中常簡寫爲regex,regexp或RE),又稱爲規則表達式。主要用來定義一些字符串的規則,使得計算機可以根據正則表達式來檢查一個字符串是否符合規則

正則表達式的創建


正則表達式有兩種創建方式

  • 使用構造方法創建;語法:var reg = new RegExp("正則表達式", "匹配模式");
  • 使用字面值常量創建;語法:var reg = /正則表達式/匹配模式;

兩種方法都可以用來創建一個正則表達式,使用字面量創建更加簡單使用構造函數創建更加靈活(構造函數中傳入的是字符串,可以傳入一個變量)

常用的匹配模式

  • i:忽略大小寫
  • g:全局匹配

正則表達式的簡單使用


正則表達式對象中有一個test()方法,使用這個方法可以檢查一個字符串是否符合正則表達式的規則,符合規則返回true,否則返回false。

// 創建一個正則表達式
// 該正則表達式可以用來檢查一個字符串中是否含有a或A,忽略大小寫
var reg = /a/i;

// 驗證下面三個字符串是否符合正則表達式的規則
document.write("reg.test(\"abcdeg\"): " + reg.test("abcdeg") + "<br />");
document.write("reg.test(\"bcAdeg\"): " + reg.test("bcAdeg") + "<br />");
document.write("reg.test(\"bcdeg\"): " + reg.test("bcdeg") + "<br />");

在這裏插入圖片描述

正則表達式的基本語法


我們通過一些簡單的需求來介紹基本語法
[]:[]中的內容表示的關係,和|一樣;如:[ab]表示a或b,a|b也表示a或b。
檢查一個字符串中是否含有a或b

// 檢查字符串中是否包含a或b
var reg1 = /[ab]/;
var reg2 = /a|b/;

document.write("reg1: " + reg1 + "<br />");
document.write("reg1.test(\"acdeg\"): " + reg1.test("acdeg") + "<br />");
document.write("reg1.test(\"bcdeg\"): " + reg1.test("bcdeg") + "<br />");
document.write("reg1.test(\"cdeg\"): " + reg1.test("cdeg") + "<br /><br />");

document.write("reg2: " + reg2 + "<br />");
document.write("reg2.test(\"acdeg\"): " + reg2.test("acdeg") + "<br />");
document.write("reg2test(\"bcdeg\"): " + reg2.test("bcdeg") + "<br />");
document.write("reg2test(\"cdeg\"): " + reg2.test("cdeg") + "<br />");

在這裏插入圖片描述

[a-z]表示a或b或c…或z,表示任意小寫字母;同樣的[A-Z]表示任意大寫字母[0-9]表示任意數字
檢查一個字符串中是否包含任意小寫字母

// 檢查是否包含任意小寫字母
var reg = /[a-z]/;

document.write("reg: " + reg + "<br />");
document.write("reg.test(\"ae86\"): " + reg.test("ae86") + "<br />");
document.write("reg.test(\"9527\"): " + reg.test("9527") + "<br />");

在這裏插入圖片描述

檢查一個字符串中是否包含xyz或xaz或xuz

// 檢查是否包含xaz或xuz或xyz
var reg = /x[auy]z/;

document.write("reg: " + reg + "<br />");
document.write("reg.test(\"xaz\"): " + reg.test("xaz") + "<br />");
document.write("reg.test(\"xuz\"): " + reg.test("xuz") + "<br />");
document.write("reg.test(\"xyz\"): " + reg.test("xyz") + "<br />");
document.write("reg.test(\"xyy\"): " + reg.test("xyy") + "<br />");

在這裏插入圖片描述

[^]:表示除了,如:[^ab]表示除了a和b
檢查字符串中是否包含除了xyz之外的字符

// 檢查是否包含除了xyz的其他字符
var reg = /[^xyz]/;

document.write("reg: " + reg + "<br />");
document.write("reg.test(\"xyz\"): " + reg.test("xyz") + "<br />");
document.write("reg.test(\"x\"): " + reg.test("x") + "<br />");
document.write("reg.test(\"y\"): " + reg.test("y") + "<br />");
document.write("reg.test(\"z\"): " + reg.test("z") + "<br />");
document.write("reg.test(\"axyz\"): " + reg.test("axyz") + "<br />");

在這裏插入圖片描述

量詞

  • {n}正好出現n次,如:a{3}等價於aaa
  • {m,n}:出現m~n次,如:a{1~3}等價於a|aa|aaa
  • {m,}:出現m次及以上
  • +:出現至少一次,等價於{1,}
  • *:出現0次或多次,等價於{0,}
  • ?:出現0次或一次,等價於{0,1}

注意量詞只對它前邊的一個內容起作用
檢查一個字符串中是否包含xyzxyzxyzxyz

// 檢查是否包含xyzxyzxyzxyz
var reg = /(xyz){4}/;

document.write("reg: " + reg + "<br />");
document.write("reg.test(\"xyzxyzxyzxyz\"): " + reg.test("xyzxyzxyzxyz") + "<br />");
document.write("reg.test(\"xyzxyz\"): " + reg.test("xyzxyz") + "<br />");

在這裏插入圖片描述

^:表示以什麼開頭,如^a:表示以a開頭
$:表示以什麼結尾,如a$:表示以a結尾
檢查一個字符串是否以abc開頭或以xyz結尾

// 檢查一個字符串是否以abc開頭或以xyz結尾
var reg = /^abc|xyz$/;

document.write("reg: " + reg + "<br />");
document.write("reg.test(\"abcxyz\"): " + reg.test("abcxyz") + "<br />");
document.write("reg.test(\"abchehe\"): " + reg.test("abchehe") + "<br />");
document.write("reg.test(\"hehexyz\"): " + reg.test("hehexyz") + "<br />");
document.write("reg.test(\"hehe\"): " + reg.test("hehe") + "<br />");

在這裏插入圖片描述
下面看一個例子

// 檢查一個字符串是否爲s
// 以s開頭,立刻結束,只能是s
var reg = /^s$/;

document.write("reg: " + reg + "<br />");
document.write("reg.test(\"s\"): " + reg.test("s") + "<br />");
document.write("reg.test(\"bs\"): " + reg.test("bs") + "<br />");
document.write("reg.test(\"sb\"): " + reg.test("sb") + "<br />");

在這裏插入圖片描述

小練習創建一個正則表達式,用來檢查一個字符串是不是一個合法的手機號
首先,我們來分析,手機號第一位只能是1第二位只能是3~9的數字剩餘的9位可以是任何數字

// 檢測一個字符串是不是一個合法的手機號
var reg = /^1[3-9][0-9]{9}$/;

document.write("reg: " + reg + "<br />");
document.write("reg.test(\"15599631399\"): " + reg.test("15599631399") + "<br />");
document.write("reg.test(\"12599631399\"): " + reg.test("12599631399") + "<br />");
document.write("reg.test(\"32599631399\"): " + reg.test("32599631399") + "<br />");

在這裏插入圖片描述

元字符

  • \w任意字母、數字和下劃線
  • \W:與\w相反,除了字母、數字和下劃線
  • \d任意數字,等價於[0-9];
  • \D:和\d相反,除了數字
  • \s空格
  • \S:和\s相反,除了空格
  • \b單詞邊界
  • \B:和\b相反,除了單詞邊界
  • .:表示任意字符,如果想要在表達式中使用.需要使用\進行轉義,即:\.

小練習:創建一個正則表達式,檢測一個字符串是否是一個合法的郵箱格式
郵箱格式如:[email protected]。我們規定@前的xxx可以使用數字、字母和下劃線,長度必須在2~10之間,@後的xxx只能是字母或數字

// 檢測一個字符串是否符合郵箱格式
var reg = /^\w{2,10}@[A-Za-z0-9]{2,10}\.com$/;

document.write("reg: " + reg + "<br />");
document.write("reg.test(\"[email protected]\"): " + reg.test("[email protected]") + "<br />");
document.write("reg.test(\"[email protected]\"): " + reg.test("[email protected]") + "<br />");
document.write("reg.test(\"##[email protected]\"): " + reg.test("##[email protected]") + "<br />");

在這裏插入圖片描述

正則表達式在字符串相關方法中的使用


split()


將一個字符串拆分爲數組,可以傳入一個正則表達式,就可以根據正則表達式匹配到的字符串進行切分

var str = "1A2B3C4D5E6F7G";
var reg = /[A-Z]/;

// 根據任意字母切分字符串
var result = str.split(reg);
alert("result: " + result);

在這裏插入圖片描述

search()


檢索與正則表達式相匹配的內容,如果搜索到指定內容,返回第一次出現的索引;如果沒有搜到,返回-1。可以接收一個正則表達式作爲參數,然後會根據正則表達式去檢索字符串。

var str = "abcxyzxyzxyzabc";
var reg = /(xyz){3}/;

// 查找匹配的字符串
var result = str.search(reg);
alert("result: " + result);

在這裏插入圖片描述

match()


可以根據正則表達式,從一個字符串中將符合條件的內容提取出來,默認情況下match只會找到第一個符合要求的內容,找到以後就停止檢索,我們可以設置正則表達式爲全局匹配模式,這樣就會匹配到所有的內容。可以爲一個正則表達式設置多個匹配模式,且順序無所謂,match會將匹配到的內容封裝到一個數組中返回

var str = "abcxyAbczxaBcbcxyzaECheheabch";
var reg = /a[be]c/ig;

// 將匹配的內容提取出來
var result = str.match(reg);
alert("result: " + result);

在這裏插入圖片描述

replace()


可以將字符串中指定的內容替換爲新的內容默認只會替換匹配到的第一個,可以將正則表達式設置爲全局匹配模式,替換全部

var str = "        admin           ";
var regex = /^\s*|\s*$/g;

// 將字符串的左右空格全部替換爲空串
var result = str.replace(regex, "");
alert("result: [" + result + "]");

在這裏插入圖片描述

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