網站首頁 編程語言 正文
前言
今天我們來學習正則表達式,正則表達式的應用十分廣泛,幾乎每個涉及到交互的項目都會用到的,學會正則表達式之后會讓你除了提高效率外,會給你帶來絕對的成就感。
接下來我們正式開始!
什么是正則表達式
正則表達式是檢查、匹配字符串的表達式
正則表達式用來描述某種規則,同時它不是某種語言專有的技術,它對主流的語言都有良好的支持。
正則表達式的主要使用場景是:字符串檢驗,查找與替換。
示例:檢查輸入身份證號是否合法的正則表達式
正則表達式:(^\d{18}$)|(^\d{17}(\d|X|x)$)
現在你也許看不懂,但是等看完這篇博客之后在加以練習你就能輕松寫出來了。
字符范圍匹配
下面這個表是對單個字符約束的一些正則表達式:
正則表達式 | 說明 |
---|---|
A | 精準匹配單個字符 |
x|y | 允許出現的2個字符 |
[xyz] | 字符集合,允許出現的2個字符 |
[a-z] | 字符集合 |
[^xyz] | 集合內字符不允許出現 |
例如:匹配數字范圍(0570-0579)
正則表達式為:057[0-9]
元字符
用于匹配的特殊符號又稱作元字符
常用的元字符如下:
正則表達式 | 說明 |
---|---|
\d | 匹配任意單個數字 |
\D | 匹配\d規則以外的任意單個字符 |
\w | 匹配任意單個數字字母下劃線 |
\W | 匹配\w規則以外的任意單個字符 |
\s | 匹配單個空格 |
\n | 匹配單個換行符 |
. | 匹配任意單個字符(換行符除外) |
\. | 特殊字符只匹配. |
示例:請匹配杭州與寧波座機號碼(0571|0574-XXXXXXXX)
正則表達式為:057[14]-\d\d\d\d\d\d\d\d
多次重復匹配
當我們匹配的字符串比較長,比如身份證號有18為一個一個寫\d比較麻煩,多次重復匹配只能簡化我們的操作。
常用的多次重復匹配如下:
正則表達式 | 說明 |
---|---|
A{N} | 精準N次匹配 |
A{N,} | 最少出現N次 |
\d{N,M} | 最少可以出現N次,最多可以出現M次 |
\d* | 可以出現零次至無限次 |
\d+ | 最少出現一次,相當于{1,} |
\d? | 最多出現1次,相當于{0,1} |
示例:匹配全國的座機號(區號3或4位-電話號碼7或8位)
正則表達式:\d{3,4}-\d{7,8}
定位匹配
正則表達式 | 說明 |
---|---|
^A.* | 頭匹配-以字符A開頭 |
.*A$ | 尾匹配-以字符A結尾 |
^A.*A$ | 全字匹配-以字符A開頭結尾 |
示例:以C開頭,B結尾的字符串
正則表達式:^C.*B$
貪婪模式與非貪婪模式
貪婪模式:在滿足條件的情況下盡可能多匹配到字符串
非貪婪模式:在滿足條件的情況下盡可能少匹配到字符串
正則表達式在默認的情況下就是貪婪模式
示例:輸入123456
- 在使用正則表達式\d{4,5},之后匹配到的是12345,可見這就是貪婪模式。
- 在使用正則表達式\d{4,5}?,之后匹配到的是1234,可見這就是非貪婪模式。
可見,只需要在正則表達式的后面加一個?,就可以從貪婪模式變換到非貪婪模式。
表達式分組
分組就是將正則分組為多個子表達式。
示例:abababcdcdcd
正則表達式:(ab){3}(cd){3}
示例:檢查輸入身份證號是否合法的正則表達式
正則表達式:(^\d{18}$)|(^\d{17}(\d|X|x)$)
結合JavaScript練習正則表達式
在JS中定義正則表達式對象只需要在//之間書寫正則表達式即可
我們實現用表單來驗證輸入姓名和身份證號是否合法。
<!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>Insert title here</title> </head> <body> <form action="#" method="post" id ="frmInfo"> <div id="err" style="color:red"> </div> <div> 姓名:<input id="name" name="name"/> </div> <div> 身份證:<input id ="idno" name="idno"/> </div> <div> <input type = "submit"/> </div> </form> <script type="text/javascript"> document.getElementById("frmInfo").onsubmit = function(){ //漢字范圍\u4e00-\u9fa5 var regex1 = /^[\u4e00-\u9fa5]{2,8}$/; var regex2 = /^[1234568]\d{16}[0-9xX]$/; var name = document.getElementById("name").value; var idno = document.getElementById("idno").value; //利用正則表達式進行匹配,true-匹配,false-失敗 if(regex1.test(name) == false){ document.getElementById("err").innerHTML = "無效姓名"; return false; }else if(regex2.test(idno) == false){ document.getElementById("err").innerHTML = "無效身份證號"; return false; }else{ alert("驗證通過,準備提交!"); return true; } } </script> </body> </html>
輸出:
結語
多加練習之后,書寫起來還是比較簡單的。而且很有成就感。加油!
原文鏈接:https://blog.csdn.net/apple_51673523/article/details/123527753
相關推薦
- 2022-03-11 C++實操之內聯成員函數介紹_C 語言
- 2022-06-06 基于VSTS的Xamarin.Android持續集成步驟詳解_Android
- 2022-09-17 python?字符串模糊匹配Fuzzywuzzy的實現_python
- 2022-06-19 基于Python實現音樂播放器的實現示例代碼_python
- 2022-12-06 C++如何將字符串顛倒輸出_C 語言
- 2022-10-07 基于Python實現文本文件轉Excel_python
- 2022-06-26 Docker上部署Nginx的方法步驟_docker
- 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同步修改后的遠程分支