js 正則記錄

正則表達式

  • 正則表達式
    • 創建一個正則表達式
    • 修飾符
    • 常用的特殊字符
    • 使用正則表達式的方法
      • replace
        • 指定字符串作為替換項
          • 使用場景:
            • 交換字符串中的兩個單詞
            • 將"-"鏈接的方式改為駝峰式(忽略開頭的-)
            • 將華氏溫度轉換為響應的攝氏溫度
  • 常用正則示例
          • 判斷輸入是否是正確的郵箱格式
            • 給定字符串 str,檢查其是否符合美元書寫格式(小數部分若有,則小數長度為2)
          • 匹配純數字或純小寫字母或純大寫字母,且長度在5-16之間(不能輸入特殊字符)
          • 允許數字、大小寫字母、但至少包含其中兩種,且長度在8-16之間(不能是純數字、純小寫字母、純大寫字母,不能輸入特殊字符)
          • 密碼中同時包含數字、大小寫字母,且長度在6-20之間(不能輸入特殊字符)
          • 密碼中同時含字母(大或小)和數字且長度在6-20之間(不能輸入特殊字符)
          • 匹配11位,以137、139、188、186開頭的手機號

參考鏈接:https://developer.mozilla.org/zh-CN/docs/Web/JavaScript/Guide/Regular_expressions
正則表達式是用于匹配字符串中字符組合的模式 這些模式被用于 RegExp 的 exec 和 test 方法,以及 String 的 match、matchAll、replace、search 和 split 方法

正則表達式

正則表達式是用于匹配字符串中字符組合的模式

創建一個正則表達式

  1. 字面量方式:
/正則表達式/修飾符(可選)
const reg = /ab+c/i;  
console.log(reg.test('abb')) // false
console.log(reg.test('abc')) // true
console.log(reg.test('abbc')) // true
  1. 調用RegExp對象的構造函數
const reg = new RegExp("ab+c");

修飾符

修飾符含義
i執行對大小寫不敏感的匹配。
g執行全局匹配(查找所有匹配而非在找到第一個匹配后停止)
m執行多行匹配。
const str = 'dog cat and dog'
console.log(str.replace(/dog/, '')) // cat and dog
console.log(str.replace(/Dog/i, '')) // cat and dog
console.log(str.replace(/Dog/ig, '')) // cat and 

常用的特殊字符

字符含義
\1. 在非特殊字符之前的反斜杠表示下一個字符是特殊字符,不能按照字面理解。例:前面沒有 “” 的 “b” 通常匹配小寫字母 “b”,但如果前面加了 “”,它將不再匹配任何字符,而是表示一個字符邊界。
2. 在特殊字符之前的反斜杠表示下一個字符不是特殊字符,應該按照字面理解。
如果你想將字符串傳遞給 RegExp 構造函數,不要忘記在字符串字面量中反斜杠是轉義字符:/[a-z]\s/i 和 new RegExp("[a-z]\\s", "i") 創建了相同的正則表達式
^匹配輸入的開始。
例:/^A/ 并不會匹配 “an A” 中的 ‘A’,但是會匹配 “An E” 中的 'A
$匹配輸入的結束。
例:/t$/ 并不會匹配 “eater” 中的 ‘t’,但是會匹配 “eat” 中的 ‘t’
*匹配前一個表達式 0 次或多次。等價于 {0,}
例如,/bo*/ 會匹配 “A ghost boooooed” 中的 ‘booooo’ 和 “A bird warbled” 中的 ‘b’,但是在 “A goat grunted” 中不會匹配任何內容
+匹配前面一個表達式 1 次或者多次。等價于 {1,}
例如,/a+/ 會匹配 “candy” 中的 ‘a’ 和 “caaaaaaandy” 中所有的 ‘a’,但是在 “cndy” 中不會匹配任何內容
?匹配前面一個表達式 0 次或者 1 次。等價于 {0,1}
.(小數點)默認匹配除換行符之外的任何單個字符
例如,/.n/ 將會匹配 “nay, an apple is on the tree” 中的 ‘an’ 和 ‘on’,但是不會匹配 ‘nay’。
(x)它會匹配 ‘x’ 并且記住匹配項。其中括號被稱為捕獲括號
例:模式 /(foo) (bar) \1 \2/ 中的 ‘(foo)’ 和 ‘(bar)’ 匹配并記住字符串 “foo bar foo bar” 中前兩個單詞。模式中的 \1 和 \2 表示第一個和第二個被捕獲括號匹配的子字符串,即 foo 和 bar,匹配了原字符串中的后兩個單詞。
而在正則表達式的替換環節,則要使用像 $1、 2 、 . . . 、 2、...、 2...n 這樣的語法,例如,‘bar foo’.replace(/(…) (…)/, '$2 1 ′ ) 。 1')。 1)& 表示整個用于匹配的原字符串
(?:x)匹配 ‘x’ 但是不記住匹配項。這種括號叫作非捕獲括號
x(?=y)匹配’x’僅僅當’x’后面跟著’y’.這種叫做先行斷言。
(?<=y)x匹配’x’僅當’x’前面是’y’.這種叫做后行斷言
x(?!y)僅僅當’x’后面不跟著’y’時匹配’x’,這被稱為正向否定查找
(?<!y)x僅僅當’x’前面不是’y’時匹配’x’,這被稱為反向否定查找。
{n}n 是一個正整數,匹配了前面一個字符剛好出現了 n 次
{n,}n 是一個正整數,匹配前一個字符至少出現了 n 次。
{n,m}n 和 m 都是整數。匹配前面的字符至少 n 次,最多 m 次。如果 n 或者 m 的值是 0,這個值被忽略。
[xyz]一個字符集合。匹配方括號中的任意字符,包括轉義序列。你可以使用破折號(-)來指定一個字符范圍。對于點(.)和星號(*)這樣的特殊符號在一個字符集中沒有特殊的意義。
例:[abcd] 和 [a-d] 是一樣的。他們都匹配"brisket"中的‘b’,也都匹配“city”中的‘c’
[^xyz]一個反向字符集。也就是說, 它匹配任何沒有包含在方括號中的字符
[\b]匹配一個退格 (U+0008)(與\b不一樣)
\b匹配一個詞的邊界。
例:/\bm/匹配“moon”中的‘m’;/oo\b/并不匹配"moon"中的’oo’,因為’oo’被一個“字”字符’n’緊跟著。
/oon\b/匹配"moon"中的’oon’,因為’oon’是這個字符串的結束部分。這樣他沒有被一個“字”字符緊跟著
\B匹配一個非單詞邊界
\d匹配一個數字。等價于 [0-9]
\D匹配一個非數字字符。等價于 [^0-9]
\s匹配一個空白字符,包括空格、制表符、換頁符和換行符。
\S匹配一個非空白字符
\w匹配一個單字字符(字母、數字或者下劃線)。等價于 [A-Za-z0-9_]
\W匹配一個非單字字符。等價于 [^A-Za-z0-9_]
\n在正則表達式中,它返回最后的第 n 個子捕獲匹配的子字符串 (捕獲的數目以左括號計數)。

使用正則表達式的方法

replace

String.prototype.replace(pattern, replacement)方法返回一個新字符串,其中一個、多個或所有匹配的 pattern 被替換為 replacement。pattern 可以是字符串或 RegExp,replacement 可以是字符串或一個在每次匹配時調用的函數。如果 pattern 是字符串,則只會替換第一個匹配項。原始的字符串不會改變

const str = "Ruth's dog is your dog"
console.log(str.replace("Ruth's", 'my')) // my dog is your dog
console.log(str.replace(/Dog/i, 'cat')) // Ruth's cat is your dog
指定字符串作為替換項
模式插入值
$$插入一個 “$”
$&插入匹配的子字符串
$`插入匹配子字符串之前的字符串片段
$’插入匹配子字符串之后的字符串片段
$n插入第 n(索引從 1 開始)個捕獲組,其中 n 是小于 100 的正整數。
$插入名稱為 Name 的命名捕獲組

replace() 替換多次的唯一情況是傳入帶有 g 標志的正則表達式
如果 pattern 是一個空字符串,則替換項將被插入到字符串的開頭

"xxx".replace("", "_"); // "_xxx"

若replacement為函數,該函數具有以下簽名

function replacer(match, p1, p2, /* …, */ pN, offset, string, groups) {return replacement;
}
// 參數如下所示
match: 匹配的子字符串(對應$&)
p1, p2, …pN:  如果 replace() 的第一個參數是 RegExp 對象,則為捕獲組(包括命名捕獲組)找到的第 n 個字符串。(對應于上面的 $1、$2 等。)例如,如果 pattern 是 /(\a+)(\b+)/,則 p1 是 \a+ 的匹配項,p2 是 \b+ 的匹配項。如果該組是分支的一部分(例如 "abc".replace(/(a)|(b)/, Replacer)),則不匹配的替代項將為 undefined
offset: 原始字符串中匹配子字符串的偏移量。例如,如果整個字符串是 'abcd',而匹配的子字符串是 'bc',那么這個參數將是 1
string: 正在檢查的原始字符串
groups: 一個捕獲組命名組成的對象,值是匹配的部分(如果沒有匹配,則為 undefined)。僅在 pattern 包含至少一個命名捕獲組時才存在
參數的確切數量取決于第一個參數是否為 RegExp 對象,以及它有多少個捕獲組
function replacer(match, $1, $2, $3, offset, string, groups) {console.log(match) // abc12345#$*%console.log($1) // abc, $2為12345,$3為#$*%console.log(offset) // 0 (偏移量)console.log(string) // abc12345#$*%console.log(groups) // undefined
}
const newString = "abc12345#$*%".replace(/([^\d]*)(\d*)([^\w]*)/, replacer);
使用場景:
交換字符串中的兩個單詞
const re = /(\w+)\s(\w+)/;
const str = "Maria Cruz";
const newstr = str.replace(re, "$2, $1"); // Cruz, Maria
將"-"鏈接的方式改為駝峰式(忽略開頭的-)
const str = '-webkit-border-image'
const strName = str.replace(/^-/, "").replace(/-([a-z])/g, (_, $1) => $1.toUpperCase()) // webkitBorderImage
將華氏溫度轉換為響應的攝氏溫度
function f2c(x) {function convert(str, p1, offset, s) {return `${((p1 - 32) * 5) / 9}C`;}const s = String(x);const test = /(-?\d+(?:\.\d*)?)F\b/g;return s.replace(test, convert);
}
console.log(f2c('0F')) // -17.77777777777778C

常用正則示例

判斷輸入是否是正確的郵箱格式
let regemail = /^[\w\._-]+@[\w]+[\.\w]+$/
給定字符串 str,檢查其是否符合美元書寫格式(小數部分若有,則小數長度為2)
let reg = /^\$\d{1,3}(,\d{3})*(\.\d{2})?$/
匹配純數字或純小寫字母或純大寫字母,且長度在5-16之間(不能輸入特殊字符)
let reg11 = /^(\d+|[a-z]+|[A-Z]+)$/
// console.log(reg11.test('ZZZZ')) // false:111aa,ZZZZ1   ;true:aaaaa,111,ZZZZ
允許數字、大小寫字母、但至少包含其中兩種,且長度在8-16之間(不能是純數字、純小寫字母、純大寫字母,不能輸入特殊字符)
let reg10 = /^(?![\d]+$)(?![a-z]+$)(?![A-Z]+$)[\da-zA-z]{8,16}$/
// console.log(reg10.test('ZZZZZZz')) // false:123123123,ZZZZZZZ,ZZZZZZ!!!,ZZZZZZz  ;true:12312aaaaa,ZZZZZ12312aaaaa
密碼中同時包含數字、大小寫字母,且長度在6-20之間(不能輸入特殊字符)
let reg9 = /^(?=.*\d)(?=.*[a-z])(?=.*[A-Z])[\da-zA-Z]{6,20}$/
// console.log(reg9.test('Z23qwe')) // false:123qwe,123qwe!!!,ZZZ123qwe!!!   true:123qweZZZ, Z23qwe
密碼中同時含字母(大或小)和數字且長度在6-20之間(不能輸入特殊字符)
let reg8 = /^(?=.*\d)(?=.*[a-zA-Z])[\da-zA-Z]{8,16}$/
// console.log(reg8.test('Z12345ZZ!!')) // false:'abcdefgh','agh1','Z12345ZZ!!' true:abcdefgh1,Zgh12345,Z12345ZZ
匹配11位,以137、139、188、186開頭的手機號
let reg5 = /^(^137|139|188|186)[0-9]{8}$/
// console.log(reg5.exec('18664570316'))

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/712930.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/712930.shtml
英文地址,請注明出處:http://en.pswp.cn/news/712930.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

使用docker安裝dolphinscheduler

1、前提是安裝docker和docker-compose 2、#mkdir /data/dolphinscheduler 3、鏡像 docker load -i dolphinscheduler-mysql-driver.tar docker pull zookeeper:3.6.2:3.6.2 docker tag a7 bitnami/zookeeper:3.6.2 理論上postgresql也可以在線pull&#xff0c;但是在線do…

179基于matlab的2D-VMD處理圖像

基于matlab的2D-VMD處理圖像&#xff0c;將圖片進行VMD分解&#xff0c;得到K個子模態圖&#xff0c;將每個模態圖進行重構&#xff0c;得到近似的原圖。可以利用這點進行圖像去噪。程序已調通&#xff0c;可直接運行。 179 2D-VMD 圖像分解重構 圖像處理 (xiaohongshu.com)

每日五道java面試題之spring篇(九)

目錄&#xff1a; 第一題. 說一下Spring的事務傳播行為第二題. 說一下 spring 的事務隔離&#xff1f;第三題. Spring AOP and AspectJ AOP 有什么區別&#xff1f;AOP 有哪些實現方式&#xff1f;第四題. JDK動態代理和CGLIB動態代理的區別第五題. 解釋一下Spring AOP里面的幾…

Hyperf crontab 定時任務組件

composer require hyperf/crontab autoload里面配置process和crontab&#xff0c;這里主要是對crontab配置里的其他任務屬性配置進行嘗試。 onOneServer singleton onOneServer 和 singleton 在crontab源碼中src/Strategy/Executor.php 中decorateRunnable是控制是否執行的。…

【白嫖8k買的機構vip教程】Appium自動化(3):Appium-Desktop界面介紹

Appium-Desktop主界面包含三個菜單Simple、Advanced、Presets Simple界面&#xff1a; Host設置Appium server的ip地址&#xff0c;本地調試可以將ip地址修改為127.0.0.1&#xff1b;Port設置端口號&#xff0c;默認是4723不用修改Start Server 啟動 Appium serverEdit Confi…

重生奇跡MU玩家容易遇到的問題

1、玩家可以在畫面左上角座標旁找到「奇跡助手」的小按鈕&#xff0c;用它來開啟介面。 2、打怪范圍&#xff1a;自動尋找所設定范圍內的怪物&#xff0c;勾選后角色搜索范圍內若無可攻擊的目標&#xff0c;將會隨機移動位置直到有攻擊目標為止&#xff0c;但移動范圍不超出所…

搭建LNMP環境并搭建論壇和博客

目錄 一、LNMP架構原理 二、編譯安裝Nginx 三、編譯安裝MySQL 四、編譯安裝PHP 五、配置Nginx支持PHP解析 六、安裝論壇 七、安裝博客 一、LNMP架構原理 LNMP架構&#xff0c;是指在Linux平臺下&#xff0c;由運行Nginx的web服務器&#xff0c;運行PHP的動態頁面解析程序…

Node.js_基礎知識(http模塊)

網絡基礎 URL的組成結構&#xff1a;協議名: // 主機名 [:端口號] [/路徑] [?查詢字符串]協議默認端口&#xff1a; http&#xff1a;80&#xff0c;開發常用端口有 3000、8080、8090、9000https: 443 如果端口被其他程序占用&#xff0c;可以使用 資源監視器 找到占用端口的…

Python:練習:編寫一個程序,錄入一個美元數量(int),然后顯示出增加%5稅率后的相應金額。

案例&#xff1a; 編寫一個程序&#xff0c;錄入一個美元數量&#xff08;int&#xff09;&#xff0c;然后顯示出增加%5稅率后的相應金額。格式如下所示&#xff1a; Enter an amount:100 With tax added:$105.0 思考&#xff1a; 1、錄入一個美元數量&#xff0c;錄入&am…

解決GitHub無法訪問的問題:手動修改hosts文件與使用SwitchHosts工具

?? 歡迎大家來訪Srlua的博文&#xff08;づ&#xffe3;3&#xffe3;&#xff09;づ╭?&#xff5e;?? &#x1f31f;&#x1f31f; 歡迎各位親愛的讀者&#xff0c;感謝你們抽出寶貴的時間來閱讀我的文章。 我是Srlua&#xff0c;在這里我會分享我的知識和經驗。&#x…

【C++】一個求數組中最大元素的函數模板

題目 設計一個分數類 F r a c t i o n Fraction Fraction&#xff0c;再設計一個名為 M a x e l e m e n t Max_element Maxe?lement 的函數模板&#xff0c;能夠求數組中最大的元素&#xff0c;并用該模板求一個 F r a c t i o n Fraction Fraction 數組中的最大元素。 C…

SpringBoot原理-配置優先級(黑馬學習筆記)

配置優先級 在我們前面的課程當中&#xff0c;我們已經講解了SpringBoot項目當中支持的三類配置文件&#xff1a; ● application.properties ● application.yml ● application.yaml 在SpringBoot項目當中&#xff0c;我們要想配置一個屬性&#xff0c;可以通過這三種方…

Liunx前后端項目部署(小白也可安裝)

文章目錄 一、CentOS服務器的安裝二、jdk安裝三、Tomcat安裝四、MySQL安裝、五、nginX安裝六、多個項目負載均衡&#xff0c;部署后端項目七、前端項目部署 一、CentOS服務器的安裝 選擇liunx&#xff0c;下面選擇CentOS 7 ![在這里插入圖片描述](https://img-blog.csdnimg.cn…

oracle安裝RAC手動配置互信

cd $ORACLE_HOME/sshsetup grid的話是GI_HOME(一個節點上跑即可) ./sshUserSetup.sh -user oracle -hosts "vma vmb" -advanced -noPromptPassphrase集群&#xff08;oracle,grid都要做&#xff09; node1: [oracle node1~]$ ssh-keygen -t rsa //…

一文講透:可視化大屏中3D元素的融入和使用方法

在可視化大屏中&#xff0c;3D元素融入的越來越多&#xff0c;貝格前端工場經常接到這類項目&#xff0c;很多老鐵認為加個3D效果很easy&#xff0c;其實不然&#xff0c;工序非常復雜&#xff0c;總結如下。 一、什么是3D技術 三維展示&#xff08;3D展示&#xff09;是指使用…

[BUUCTF]-Reverse:reverse3解析

查看ida 從下圖的/3和*4可以推斷得出來是base64加密。 ida里大致意思就是我們輸入的字符串經過base64加密&#xff0c;循環遞減&#xff0c;最后等于str2&#xff0c;那我們輸入的字符串就是flag。 完整exp&#xff1a; import base64 liste3nifIH9b_CndH print(len(list))fl…

循環簡介和基本運算符

根據C Primer Plus第五章進行學習 文章目錄 循環簡介基本運算符 1.賦值運算符&#xff1a;2.加法運算符&#xff1a;3.減法運算符&#xff1a;-2.乘法運算符&#xff1a;*總結 1.循環簡介 如下代碼可以體現不使用循環的局限性&#xff1a; #include<stdio.h> #define AD…

什么是端口,為什么要有端口

一.端口概念 在網絡技術中&#xff0c;端口&#xff08;Port&#xff09;大致有兩種意思&#xff1a;一是物理意義上的端口&#xff0c;比如&#xff0c;ADSL Modem、集線器、交換機、路由器用于連接其他網絡設備的接口&#xff0c;如RJ-45端口、SC端口等等。二是邏輯意義上的端…

【leetcode熱題】楊輝三角 II

難度&#xff1a; 簡單通過率&#xff1a; 41.1%題目鏈接&#xff1a;. - 力扣&#xff08;LeetCode&#xff09; 題目描述 給定一個非負索引 k&#xff0c;其中 k ≤ 33&#xff0c;返回楊輝三角的第 k 行。 在楊輝三角中&#xff0c;每個數是它左上方和右上方的數的和。 示…

Doris實戰——金融壹賬通指標中臺的應用實踐

目錄 前言 一、業務痛點 二、早期架構挑戰 三、架構升級 四、一體化指標數據平臺 4.1 構建指標體系 4.2 構建指標平臺功能 五、Doris指標應用實踐 六、未來規劃 原文大佬的這篇指標中臺的應用實踐有借鑒意義&#xff0c;這里摘抄下來用作學習和知識沉淀。 前言 在搭建…