網站首頁 編程語言 正文
正則表達式的定義和用途
正則表達式用于定義一些字符串的規則。計算機可以根據正則表達式,來檢查一個字符串是否符合指定的規則,或者將字符串中符合規則的內容提取出來。
RegExp的意思是 Regular expression。使用typeof檢查正則對象,會返回object。
創建正則表達式
方式一:使用構造函數創建
使用構造函數創建時,更加靈活,因為參數中還可以傳遞變量。
var 變量 = new RegExp("正則表達式"); // 注意,參數是字符串 var 變量 = new RegExp("正則表達式", "匹配模式"); // 注意,兩個參數都是字符串
匹配模式作為第二個參數。這個參數可以是:
- i 忽略大小寫。這里的 i 指的是 ignore。
- g 全局匹配模式。這里的 g 指的是 global。
var reg = new RegExp("a"); // 定義一個正則表達式:檢查一個字符串中是否含有 a var reg = new RegExp('A', 'i'); var str = 'qiangu'; console.log(reg.test(str)); // 打印結果:true
方式二:使用字面量創建
var 變量 = /正則表達式/; // 注意,這個語法里沒有引號 var 變量 = /正則表達式/匹配模式; // 注意,這個語法里沒有引號 var reg = /A/i; // 定義正則表達式的規則:檢查一個字符串中是否含有 a。忽略大小寫。 var str = "qiangu"; console.log(typeof reg); // 打印結果:object console.log(reg.test(str)); // 打印結果:true
正則表達式的語法
匹配字符
字符 | 描述 |
---|---|
. | 匹配任意單個字符除了換行符 |
[ ] | [ ] 內為字符集,匹配 [ ] 內任一字符 |
[^ ] | 匹配除了方括號里的任意字符 |
* | 匹配 >= 0 個 * 號前的字符。 |
+ | 匹配 >= 1 個+號前的字符。 |
? | 匹配 0 或 1 個 ?號前的字符。 |
{n,m} | 匹配n到m個大括號之前的字符或字符集 |
(xyz) | 匹配與 xyz 完全相等的字符串 |
| | 或運算符,匹配|符號前或后的字符 |
\s | 匹配空格 |
\ | 轉義字符,匹配一些保留的字符?[ ] ( ) { } . * + ? ^ $ \ | |
^ | 從開始行開始匹配 |
$ | 從末端開始匹配 |
- /[ab]/ 等價于 /a|b/:檢查一個字符串中是否包含 a或b
- /[a-z]/:檢查一個字符串那種是否包含任意小寫字母
- /[A-Z]/:任意大寫字母
- /[A-z]/:任意字母
- /[0-9]/:任意數字
- /a[bde]c/:檢查一個字符串中是否包含 abc 或 adc 或 aec
- [Tt]he 匹配 the 和 The
- [^c]ar 匹配一個后面跟著ar的除了c的任意字符,如匹配par,不匹配car
- [a-z]* 匹配一個行中所有以小寫字母開頭的字符串。
"[a-z]*" => The car parked in the garage
c.+t 匹配以首字母c開頭以t結尾,中間跟著至少一個字符的字符串
"c.+t" => The fat cat sat on the mat
- [T]?he 匹配字符串 he 和 The
- [0-9]{2,3} 匹配最少 2 位最多 3 位 0~9 的數字
- 可以省略第二個參數。 例如,[0-9]{2,} 匹配至少兩位 0~9 的數字。
- 逗號也省略掉則表示重復固定的次數。 例如,[0-9]{3} 匹配3位數字
- (c|g|p)ar 匹配 car 或 gar 或 par
- "(f|c|m)at\.?" => The fat cat sat on the mat.
- "(T|t)he" => The car is parked in the garage.
- "^(T|t)he" => The car is parked in the garage.
簡寫
簡寫 | 描述 |
---|---|
\w | 匹配所有字母數字,等同于?[a-zA-Z0-9_]
|
\W | 匹配所有非字母數字,即符號,等同于:?[^\w]
|
\d | 匹配數字:?[0-9]
|
\D | 匹配非數字:?[^\d]
|
\s | 匹配所有空格字符,等同于:?[\t\n\f\r\p{Z}]
|
\S | 匹配所有非空格字符:?[^\s]
|
\f | 匹配一個換頁符 |
\n | 匹配一個換行符 |
\r | 匹配一個回車符 |
\t | 匹配一個制表符 |
\v | 匹配一個垂直制表符 |
\p | 匹配 CR/LF(等同于?\r\n ),用來匹配 DOS 行終止符 |
模式修正符
標志 | 描述 |
---|---|
i | 忽略大小寫。 |
g | 全局搜索。 |
m | 多行修飾符:錨點元字符?^ ?$ ?工作范圍在每行的起始。 |
- "/The/gi" => The fat cat sat on the mat.
- "/.(at)/g" => The fat cat sat on the mat.
- (^,$) 用于檢查格式是否是在待檢測字符串的開頭或結尾。但我們如果想要它在每行的開頭和結尾生效,我們需要用到多行修飾符 m。
貪婪匹配
正則表達式默認采用貪婪匹配模式,在該模式下意味著會匹配盡可能長的子串。
"/(.*at)/" => The fat cat sat on the mat.
惰性匹配
使用 ? 將貪婪匹配模式轉化為惰性匹配模式。
"/(.*?at)/" => The fat cat sat on the mat.
斷言
符號 | 描述 |
---|---|
?= | 正先行斷言-存在 |
?! | 負先行斷言-排除 |
?<= | 正后發斷言-存在 |
?<! | 負后發斷言-排除 |
- 定義一個正先行斷言要使用 ()。在括號內部使用一個問號和等號: (?=...)。正先行斷言的內容寫在括號中的等號后面。 例如,表達式 (T|t)he(?=\sfat) 匹配 The 和 the,在括號中我們又定義了正先行斷言 (?=\sfat) ,即 The 和 the 后面緊跟著 (空格)fat。
"(T|t)he(?=\sfat)" => The fat cat sat on the mat.
- 負先行斷言 ?! 用于篩選出其后不跟隨斷言中定義的格式。表達式 (T|t)he(?!\sfat) 匹配 The 和 the,且其后不跟著 (空格)fat。
"(T|t)he(?!\sfat)" => The fat cat sat on the mat.
- 正后發斷言 記作(?<=...) 用于篩選所有匹配結果,篩選條件為 其前跟隨著斷言中定義的格式。 例如,表達式 (?<=(T|t)he\s)(fat|mat) 匹配 fat 和 mat,且其前跟著 The 或 the。
"(?<=(T|t)he\s)(fat|mat)" => The fat cat sat on the mat.
- 負后發斷言 記作 (?<!...) 用于篩選所有匹配結果,篩選條件為 其前不跟隨著斷言中定義的格式。 例如,表達式 (?<!(T|t)he\s)(cat) 匹配 cat,且其前不跟著 The 或 the。
"(?<!(T|t)he\s)(cat)" => The cat sat on cat.
正則表達式的使用
判斷字符串是否符合規則 test()
符合則返回true,否則返回false。
var reg = /[^ab]/; // 規則:字符串中,除了a、b之外,還有沒有其他的字符內容? var str = "acb"; console.log(reg.test(str)); // 打印結果:true
var reg = /[^0-9]/; // 規則:字符串中,除了數字之外,還有沒有其他的內容? var str1 = "1991"; var str2 = "199a1"; console.log(reg.test(str1)); // 打印結果:false (如果字符串是 純數字,則返回 false) console.log(reg.test(str2)); // 打印結果:true
搜索第一個符合條件的字符串 search()
search()【只會查找第一個】——搜索字符串中是否含有指定內容。如果搜索到指定內容,則會返回第一次出現的索引;否則返回-1。
var str = "hello abc hello aec afc"; // 搜索字符串中是否含有abc 或 aec 或 afc result = str.search(/a[bef]c/); console.log(result); // 打印結果:6
搜索所有符合條件的字符串 match()
從一個字符串中將符合條件的內容提取出來,封裝到一個數組中返回(即使只查詢到一個結果)。
默認情況下,match()方法只會找到第一個符合要求的內容,設置正則表達式為全局匹配模式,這樣就會匹配到所有的內容,并以數組的形式返回。
可以為一個正則表達式設置多個匹配模式,且匹配模式的順序無所謂。
var str = "1a2a3a4a5e6f7A8B9C"; var result1 = str.match(/[a-z]/); // 找到符合要求的第一個內容,然后返回 var result2 = str.match(/[a-z]/g); // 設置為“全局匹配”模式,匹配字符串中 所有的小寫字母 var result3 = str.match(/[a-z]/gi); // 設置多個匹配模式,匹配字符串中 所有的字母(忽略大小寫) console.log(result1); // 打印結果:["a"] console.log(result2); // 打印結果:["a", "a", "a", "a", "e", "f"] console.log(result3); // 打印結果:["a", "a", "a", "a", "e", "f", "A", "B", "C"]
字符串拆分成數組 split()
var str = "1a2b3c4d5e6f7g"; var result = str.split(/[A-z]/); // 參數是一個正則表達式:表示所有字母 console.log(result); // ["1", "2", "3", "4", "5", "6", "7", ""]
?字符串替換 replace()
默認只會替換第一個,如果需要替換全部符合條件的內容,可以設置正則表達式為全局匹配模式。
let str1 = '2020/5/20' console.log(str1.replace(/\//g,"-")); //得到 2020-5-20 var str2 = "Today is fine day,today is fine day !!!" console.log(str2.replace("today","tomorrow")); //只能替換第一個today console.log(str2.replace(/today/gi,"tomorrow")); //這里用到了正則,且為“全局匹配”模式,才能替換所有的today
過濾HTML標簽?
str.replace(/<.*?>/g, "")
去除空格
str = str.replace(/^\s*/, ""); //去除開頭的空格 str = str.replace(/\s*$/, ""); //去除結尾的空格
常用正則表達式
常用正則表達式大全
最全的常用正則表達式大全——包括校驗數字、字符、一些特殊的需求等等
非零數字(只能輸入數字,但值不能為0,可以是00,01等)
/^([0]{2}|0[1-9]|[1-9])\d*$/
驗證保留兩位小數的正整數或0
/^([1-9]\d*|0)(\.\d{1,2})?$/
驗證手機號碼,如13908653654
/^(1[3|5|7|8][0-9]{9})$/
驗證固定號碼,如010-86551122或01086551122
/^((0\d{2,3})[-]?)(\d{7,8})([-]?(\d{3,}))?$/
?驗證電話號碼—手機號碼或固定號碼,如13908653654或010-86551122或01086551122
/(^(1[3|5|7|8][0-9]{9})$)|(^((0\d{2,3})[-]?)(\d{7,8})([-]?(\d{3,}))?$)/
驗證一代身份證號碼
/^\d{8}(0\d|10|11|12)([0-2]\d|30|31)\d{3}$/
驗證二代身份證號碼
/^\d{6}(18|19|20)\d{2}(0\d|10|11|12)([0-2]\d|30|31)\d{3}[\dXx]$/
驗證通用身份證號碼
/(^\d{8}(0\d|10|11|12)([0-2]\d|30|31)\d{3}$)|(^\d{6}(18|19|20)\d{2}(0\d|10|11|12)([0-2]\d|30|31)\d{3}(\d|X|x)$)/
總結
原文鏈接:https://blog.csdn.net/weixin_41192489/article/details/113618913
相關推薦
- 2022-06-12 C#異步編程的三種模式_C#教程
- 2023-03-26 rollup?cli開發全面系統性rollup源碼分析_其它
- 2022-03-16 shell中的排序算法示例代碼_linux shell
- 2022-07-11 Python利用xlrd?與?xlwt?模塊操作?Excel_python
- 2022-09-09 Go語言中defer語句的用法_Golang
- 2022-06-17 C#多線程死鎖介紹與案例代碼_C#教程
- 2022-10-06 C++?abs函數實際應用詳解_C 語言
- 2022-12-13 C#實現字符串進制轉換方法匯總_C#教程
- 最近更新
-
- window11 系統安裝 yarn
- 超詳細win安裝深度學習環境2025年最新版(
- Linux 中運行的top命令 怎么退出?
- MySQL 中decimal 的用法? 存儲小
- get 、set 、toString 方法的使
- @Resource和 @Autowired注解
- Java基礎操作-- 運算符,流程控制 Flo
- 1. Int 和Integer 的區別,Jav
- spring @retryable不生效的一種
- Spring Security之認證信息的處理
- Spring Security之認證過濾器
- Spring Security概述快速入門
- Spring Security之配置體系
- 【SpringBoot】SpringCache
- Spring Security之基于方法配置權
- redisson分布式鎖中waittime的設
- maven:解決release錯誤:Artif
- restTemplate使用總結
- Spring Security之安全異常處理
- MybatisPlus優雅實現加密?
- Spring ioc容器與Bean的生命周期。
- 【探索SpringCloud】服務發現-Nac
- Spring Security之基于HttpR
- Redis 底層數據結構-簡單動態字符串(SD
- arthas操作spring被代理目標對象命令
- Spring中的單例模式應用詳解
- 聊聊消息隊列,發送消息的4種方式
- bootspring第三方資源配置管理
- GIT同步修改后的遠程分支