正則表達式之字符串模式匹配實例詳解
前言
今天我們來學習正則表達式,正則表達式的應(yīng)用十分廣泛,幾乎每個涉及到交互的項目都會用到的,學會正則表達式之后會讓你除了提高效率外,會給你帶來絕對的成就感。
接下來我們正式開始!
什么是正則表達式
正則表達式是檢查、匹配字符串的表達式
正則表達式用來描述某種規(guī)則,同時它不是某種語言專有的技術(shù),它對主流的語言都有良好的支持。
正則表達式的主要使用場景是:字符串檢驗,查找與替換。
示例:檢查輸入身份證號是否合法的正則表達式
正則表達式:(^\d{18}$)|(^\d{17}(\d|X|x)$)
現(xiàn)在你也許看不懂,但是等看完這篇博客之后在加以練習你就能輕松寫出來了。
字符范圍匹配
下面這個表是對單個字符約束的一些正則表達式:
| 正則表達式 | 說明 |
|---|---|
| A | 精準匹配單個字符 |
| x|y | 允許出現(xiàn)的2個字符 |
| [xyz] | 字符集合,允許出現(xiàn)的2個字符 |
| [a-z] | 字符集合 |
| [^xyz] | 集合內(nèi)字符不允許出現(xiàn) |
例如:匹配數(shù)字范圍(0570-0579)
正則表達式為:057[0-9]
元字符
用于匹配的特殊符號又稱作元字符
常用的元字符如下:
| 正則表達式 | 說明 |
|---|---|
| \d | 匹配任意單個數(shù)字 |
| \D | 匹配\d規(guī)則以外的任意單個字符 |
| \w | 匹配任意單個數(shù)字字母下劃線 |
| \W | 匹配\w規(guī)則以外的任意單個字符 |
| \s | 匹配單個空格 |
| \n | 匹配單個換行符 |
| . | 匹配任意單個字符(換行符除外) |
| \. | 特殊字符只匹配. |
示例:請匹配杭州與寧波座機號碼(0571|0574-XXXXXXXX)
正則表達式為:057[14]-\d\d\d\d\d\d\d\d
多次重復(fù)匹配
當我們匹配的字符串比較長,比如身份證號有18為一個一個寫\d比較麻煩,多次重復(fù)匹配只能簡化我們的操作。
常用的多次重復(fù)匹配如下:
| 正則表達式 | 說明 |
|---|---|
| A{N} | 精準N次匹配 |
| A{N,} | 最少出現(xiàn)N次 |
| \d{N,M} | 最少可以出現(xiàn)N次,最多可以出現(xiàn)M次 |
| \d* | 可以出現(xiàn)零次至無限次 |
| \d+ | 最少出現(xiàn)一次,相當于{1,} |
| \d? | 最多出現(xiàn)1次,相當于{0,1} |
示例:匹配全國的座機號(區(qū)號3或4位-電話號碼7或8位)
正則表達式:\d{3,4}-\d{7,8}
定位匹配
| 正則表達式 | 說明 |
|---|---|
| ^A.* | 頭匹配-以字符A開頭 |
| .*A$ | 尾匹配-以字符A結(jié)尾 |
| ^A.*A$ | 全字匹配-以字符A開頭結(jié)尾 |
示例:以C開頭,B結(jié)尾的字符串
正則表達式:^C.*B$
貪婪模式與非貪婪模式
貪婪模式:在滿足條件的情況下盡可能多匹配到字符串
非貪婪模式:在滿足條件的情況下盡可能少匹配到字符串
正則表達式在默認的情況下就是貪婪模式
示例:輸入123456
- 在使用正則表達式\d{4,5},之后匹配到的是12345,可見這就是貪婪模式。
- 在使用正則表達式\d{4,5}?,之后匹配到的是1234,可見這就是非貪婪模式。
可見,只需要在正則表達式的后面加一個?,就可以從貪婪模式變換到非貪婪模式。
表達式分組
分組就是將正則分組為多個子表達式。
示例:abababcdcdcd
正則表達式:(ab){3}(cd){3}
示例:檢查輸入身份證號是否合法的正則表達式
正則表達式:(^\d{18}$)|(^\d{17}(\d|X|x)$)
結(jié)合JavaScript練習正則表達式
在JS中定義正則表達式對象只需要在//之間書寫正則表達式即可
我們實現(xiàn)用表單來驗證輸入姓名和身份證號是否合法。
<!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>
輸出:




結(jié)語
多加練習之后,書寫起來還是比較簡單的。而且很有成就感。加油!
到此這篇關(guān)于正則表達式之字符串模式匹配的文章就介紹到這了,更多相關(guān)正則表達式字符串模式匹配內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Javascript中使用exec進行正則表達式全局匹配時的注意事項
在 Javascript 中使用 exec 進行正則表達式全局匹配時,有一個非常容易犯的錯誤,這是因為 exec() 在全局模式下的行為稍微有點復(fù)雜2011-11-11
正則替換實現(xiàn)輸入框只能有數(shù)字、中英文逗號
最近在開發(fā)過程中,需要一個輸入框里面只能有數(shù)字與中英文逗號,因為是相關(guān)文章,其它的也不讓出現(xiàn),容易造成問題,編程容易把介紹復(fù)制到里面,所以想到了這個方法2016-05-05
正則表達式中環(huán)視的簡單應(yīng)用示例【基于java】
這篇文章主要介紹了正則表達式中環(huán)視的簡單應(yīng)用,簡單分析了環(huán)視的概念與功能,并基于java給出了正則表達式環(huán)視的具體使用技巧,需要的朋友可以參考下2017-04-04

