JavaScript 正則表達式【轉】

来源:https://www.cnblogs.com/KillBugMe/archive/2020/04/14/12697249.html
-Advertisement-
Play Games

[TOC] 一、JavaScript正則表達式 正則表達式(英語:Regular Expression,在代碼中常簡寫為regex、regexp或RE)使用單個字元串來描述、匹配一系列符合某個句法規則的字元串搜索模式。 搜索模式可用於文本搜索和文本替換。 什麼是正則表達式? 正則表達式是由一個字元序 ...


目錄

一、JavaScript正則表達式

正則表達式(英語:Regular Expression,在代碼中常簡寫為regex、regexp或RE)使用單個字元串來描述、匹配一系列符合某個句法規則的字元串搜索模式。
搜索模式可用於文本搜索和文本替換。


什麼是正則表達式?

正則表達式是由一個字元序列形成的搜索模式。
當你在文本中搜索數據時,你可以用搜索模式來描述你要查詢的內容。
正則表達式可以是一個簡單的字元,或一個更複雜的模式。
正則表達式可用於所有文本搜索和文本替換的操作。

語法

/正則表達式主體/修飾符(可選)

其中修飾符是可選的。
實例:

var patt = /runoob/i

實例解析:
/runoob/i  是一個正則表達式。
runoob  是一個正則表達式主體(用於檢索)。
i  是一個修飾符(搜索不區分大小寫)。


使用字元串方法

在 JavaScript 中,正則表達式通常用於兩個字元串方法 : search() 和 replace()。
search() 方法用於檢索字元串中指定的子字元串,或檢索與正則表達式相匹配的子字元串,並返回子串的起始位置。
replace() 方法用於在字元串中用一些字元替換另一些字元,或替換一個與正則表達式匹配的子串。


search() 方法使用正則表達式

實例:使用正則表達式搜索 "Runoob" 字元串,且不區分大小寫:

var  str = "Visit Runoob!"; 
var  n = str.search(/Runoob/i);
console.log(n );//輸出結果為:6

search() 方法使用字元串

search 方法可使用字元串作為參數。字元串參數會轉換為正則表達式:
實例:檢索字元串中 "Runoob" 的子串:

var  str = "Visit Runoob!"; 
var  n = str.search("Runoob");
console.log(n );//輸出結果為:6

replace() 方法使用正則表達式

實例:使用正則表達式且不區分大小寫將字元串中的 Microsoft 替換為 Runoob :

var  str = 'Visit Microsoft!'; 
var  txt = str.replace(/microsoft/i,"Runoob");
console.log(txt);//結果輸出為:Visit Runoob!

你註意到了嗎?
正則表達式參數可用在以上方法中 (替代字元串參數)。正則表達式使得搜索功能更加強大(如實例中不區分大小寫)。


replace() 方法使用字元串

實例:replace() 方法將接收字元串作為參數:

var  str = 'Visit Microsoft!'; 
var  txt = str.replace("Microsoft","Runoob");
console.log(txt);//結果輸出為:Visit Runoob!

正則表達式修飾符

修飾符可以在全局搜索中不區分大小寫:

修飾符 描述
i 執行對大小寫不敏感的匹配。
g 執行全局匹配(查找所有匹配而非在找到第一個匹配後停止)。
m 執行多行匹配。

正則表達式模式

方括弧用於查找某個範圍內的字元:

表達式 描述
[abc] 查找方括弧之間的任何字元。
[0-9] 查找任何從 0 至 9 的數字。
(x|y) 查找任何以

元字元是擁有特殊含義的字元:

元字元 描述
\d 查找數字。
\s 查找空白字元。
\b 匹配單詞邊界。
\uxxxx 查找以十六進位數 xxxx 規定的 Unicode 字元。

量詞:

量詞 描述
n+ 匹配任何包含至少一個n的字元串。
n* 匹配任何包含零個多個n的字元串。
n? 匹配任何包含零個一個n的字元串。

使用 RegExp 對象

在 JavaScript 中,RegExp 對象是一個預定義了屬性和方法的正則表達式對象。


使用 test()

test() 方法是一個正則表達式方法。
test() 方法用於檢測一個字元串是否匹配某個模式,如果字元串中含有匹配的文本,則返回 true,否則返回 false。
以下實例用於搜索字元串中的字元 "e":
實例:

var patt = /e/;  
var res = patt.test("The best things in life are free!");
console.log(res );//字元串中含有 "e",所以該實例輸出為:true

你可以不用設置正則表達式的變數,以上兩行代碼可以合併為一行:

/e/.test("The best things in life are free!")

使用 exec()

exec() 方法是一個正則表達式方法。
exec() 方法用於檢索字元串中的正則表達式的匹配。
該函數返回一個數組,其中存放匹配的結果。如果未找到匹配,則返回值為 null。
以下實例用於搜索字元串中的字母 "e":
實例:

var res = /e/.exec("The best things in life are free!");
console.log(res? res[0] : res);//字元串中含有 "e",所以該實例輸出為:e

正則表達式表單驗證實例:

/*是否帶有小數*/
function    isDecimal(strValue )  {  
   var  objRegExp= /^\d+\.\d+$/;
   return  objRegExp.test(strValue);  
}  

/*校驗是否中文名稱組成 */
function ischina(str) {
    var reg=/^[\u4E00-\u9FA5]{2,4}$/;   /*定義驗證表達式*/
    return reg.test(str);     /*進行驗證*/
}

/*校驗是否全由8位數字組成 */
function isStudentNo(str) {
    var reg=/^[0-9]{8}$/;   /*定義驗證表達式*/
    return reg.test(str);     /*進行驗證*/
}

/*校驗電話碼格式 */
function isTelCode(str) {
    var reg= /^((0\d{2,3}-\d{7,8})|(1[3584]\d{9}))$/;
    return reg.test(str);
}

/*校驗郵件地址是否合法 */
function IsEmail(str) {
    var reg=/^\w+@[a-zA-Z0-9]{2,10}(?:\.[a-z]{2,4}){1,3}$/;
    return reg.test(str);
}

二、JavaScriptRegExp對象

RegExp 對象

正則表達式是描述字元模式的對象。
正則表達式用於對字元串模式匹配及檢索替換,是對字元串執行模式匹配的強大工具。

語法

var patt=new RegExp(pattern,modifiers);  

或者更簡單的方式:

var patt=/pattern/modifiers;
  • pattern(模式) 描述了表達式的模式
  • modifiers(修飾符) 用於指定全局匹配、區分大小寫的匹配和多行匹配

註意: 當使用構造函數創造正則對象時,需要常規的字元轉義規則(在前面加反斜杠 \)。比如,以下是等價的:

var re = new RegExp("\\w+");
var re = /\w+/;

修飾符

修飾符用於執行區分大小寫和全局匹配:

修飾符 描述
i 執行對大小寫不敏感的匹配。
g 執行全局匹配(查找所有匹配而非在找到第一個匹配後停止)。
m 執行多行匹配。

方括弧

方括弧用於查找某個範圍內的字元:

表達式 描述
[abc] 查找方括弧之間的任何字元。
[^abc] 查找任何不在方括弧之間的字元。
[0-9] 查找任何從 0 至 9 的數字。
[a-z] 查找任何從小寫 a 到小寫 z 的字元。
[A-Z] 查找任何從大寫 A 到大寫 Z 的字元。
[A-z] 查找任何從大寫 A 到小寫 z 的字元。
[adgk] 查找給定集合內的任何字元。
[^adgk] 查找給定集合外的任何字元。
(red|blue|green) 查找任何指定的選項。

元字元

元字元(Metacharacter)是擁有特殊含義的字元:

元字元 描述
. 查找單個字元,除了換行和行結束符。
\w 查找單詞字元。
\W 查找非單詞字元。
\d 查找數字。
\D 查找非數字字元。
\s 查找空白字元。
\S 查找非空白字元。
\b 匹配單詞邊界。
\B 匹配非單詞邊界。
\0 查找 NULL 字元。
\n 查找換行符。
\f 查找換頁符。
\r 查找回車符。
\t 查找製表符。
\v 查找垂直製表符。
\xxx 查找以八進位數 xxx 規定的字元。
\xdd 查找以十六進位數 dd 規定的字元。
\uxxxx 查找以十六進位數 xxxx 規定的 Unicode 字元。

量詞

量詞 描述
n+ 匹配任何包含至少一個 n 的字元串。
例如:/a+/ 匹配 "candy" 中的 "a","caaaaaaandy" 中所有的 "a"。
n* 匹配任何包含零個或多個 n 的字元串。
例如,/bo*/ 匹配 "A ghost booooed" 中的 "boooo","A bird warbled" 中的 "b",但是不匹配 "A goat grunted"。
n? 匹配任何包含零個或一個 n 的字元串。
例如,/e?le?/ 匹配 "angel" 中的 "el","angle" 中的 "le"。
n{X} 匹配包含 X 個 n 的序列的字元串。
例如,/a{2}/ 不匹配 "candy," 中的 "a",但是匹配 "caandy," 中的兩個 "a",且匹配 "caaandy." 中的前兩個 "a"。
n{X,} X 是一個正整數。前面的模式 n 連續出現至少 X 次時匹配。
例如,/a{2,}/ 不匹配 "candy" 中的 "a",但是匹配 "caandy" 和 "caaaaaaandy." 中所有的 "a"。
n{X,Y} X 和 Y 為正整數。前面的模式 n 連續出現至少 X 次,至多 Y 次時匹配。
例如,/a{1,3}/ 不匹配 "cndy",匹配 "candy," 中的 "a","caandy," 中的兩個 "a",匹配 "caaaaaaandy" 中的前面三個 "a"。註意,當匹配 "caaaaaaandy" 時,即使原始字元串擁有更多的 "a",匹配項也是 "aaa"。
n$ 匹配任何結尾為 n 的字元串。
^n 匹配任何開頭為 n 的字元串。
?=n 匹配任何其後緊接指定字元串 n 的字元串。
?!n 匹配任何其後沒有緊接指定字元串 n 的字元串。

RegExp 對象方法

方法 描述
compile 在 1.5 版本中已廢棄。編譯正則表達式。
exec 檢索字元串中指定的值。返回找到的值,並確定其位置。
test 檢索字元串中指定的值。返回 true 或 false。
toString 返回正則表達式的字元串。

支持正則表達式的 String 對象的方法

方法 描述 FF IE
search 檢索與正則表達式相匹配的值。 1 4
match 找到一個或多個正則表達式的匹配。 1 4
replace 替換與正則表達式匹配的子串。 1 4
split 把字元串分割為字元串數組。 1 4

RegExp 對象屬性

屬性 描述
constructor 返回一個函數,該函數是一個創建 RegExp 對象的原型。
global 判斷是否設置了 "g" 修飾符
ignoreCase 判斷是否設置了 "i" 修飾符
lastIndex 用於規定下次匹配的起始位置
multiline 判斷是否設置了 "m" 修飾符
source 返回正則表達式的匹配模式

參考鏈接:
https://www.runoob.com/js/js-regexp.html
https://www.runoob.com/jsref/jsref-obj-regexp.html


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • React添加事件,和DOM上添加事件類似,但又有細微的不同. React添加事件,需要註意: 1.React的事件命名採用小駝峰(camelCase)的命名方式,DOM採用的是純小寫的方式; 2.使用JSX語法時,需要傳入一個函數作為事件的處理函數,DOM傳入的是一個字元串(雖然DOM中傳入的事件 ...
  • 我現在學bootstrap是不是太遲了哈哈哈 先來個小案例熟悉下 <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>demo1</title> <link rel="stylesheet" href="http ...
  • 匿名函數是沒有函數名的,不能單獨使用; 立即執行函數是基於匿名函數實現的,也沒有函數名,會在定義後立即執行; 閉包是有權訪問另一個函數作用域中的變數的函數。匿名函數、立即執行函數只要滿足 有權訪問另一個函數作用域中的變數 這一個條件,就成了閉包。 匿名函數 匿名函數:沒有函數名的函數 匿名函數不能單 ...
  • React 支持一種非常特殊的屬性 Ref ,可以用來綁定到 render() 輸出的任何組件上 import React, { Component } from 'react'; import ReactDOM from 'react-dom'; import './index.css'; imp ...
  • import React, { Component } from 'react'; import ReactDOM from 'react-dom'; import './index.css'; import * as serviceWorker from './serviceWorker'; cl ...
  • React 組件的數據可以通過 componentDidMount 方法中的 Ajax 來獲取,當從服務端獲取數據時可以將數據存儲在 state 中,再用 this.setState 方法重新渲染 UI。當使用非同步載入數據時,在組件卸載前使用 componentWillUnmount 來取消未完成的 ...
  • 在之前一段時間,網傳有個技術團隊做了個移動端的APP,發佈上線時候稱可以直接生成網頁效果,於是有很多人一下子慌了。 最近就有不少人紛紛來問李老師,“現在手機APP可以直接生成網頁了,都可以取代前端開發工程師的工作了,以後APP發展越來越厲害,前端開發工程師的產品應用是不是更少了,前端開發是不是意味著 ...
  • 組件的生命周期可分成三個狀態: Mounting:已插入真實 DOMUpdating:正在被重新渲染Unmounting:已移出真實 DOM 生命周期的方法有:componentWillMount 在渲染前調用,在客戶端也在服務端。componentDidMount : 在第一次渲染後調用,只在客戶 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...