摘要:正則表達式理論基礎篇搬運自個人博客原址正則表達式理論基礎篇什么是正則表達式可以稱作規則一個描述字符模式的對象,正則表達式中的字母和數字,都是按照字面含義進行匹配的。
正則表達式-理論基礎篇
搬運自個人博客,原址正則表達式-理論基礎篇
什么是正則表達式?
可以稱作規則一個描述字符模式的對象,正則表達式中的字母和數字,都是按照字面含義進行匹配的。強大的字符串匹配工具
如何建立一個正則表達式?
使用RegExp()構造函數來創建RegExp對象
特殊的直接量語法來創建,定義為包含在一對斜杠(/)之間的字符
例:var reg = /s$/; , var reg = new RegExp(s$);
兩者效果完全相同,用來匹配所有以字母“s”結尾的字符串。
非字母的字符匹配,這些字符需要通過反斜線()作前綴進行轉義.
字 符 | 匹 配 |
---|---|
字母和數字字符 | 自身 |
o | NUL字符 |
制表符 | |
換行符 | |
v | 垂直制表符 |
f | 換頁符 |
回車符 | |
xnn | 由十六進制數nn指定的拉丁字符,例:x0A等價于 |
uxxxx | 由十六進制數xxxx指定的unicode字符,例:u0009等價于 |
cX | 控制字符^X,例:cJ等價于換行符 |
具有特殊含義的標點符號:
^, $, ., *, +, ?, =, !, :, |, , /,(,),[,],{, }
想在正則表達式中使用這些字符的直接量進行匹配,則必須使用前綴"",其他標點符號(比如@和引號)無特殊含義,在正則表達式中按照字面含義進行匹配。
2.字符類.方括號,或,范圍
將直接量字符多帶帶放進方括號內就組成了字符類。一個字符類可以匹配它包含的任意字符。字符類可以使用連字符來表示字符范圍。
字 符 | 含 義 |
---|---|
[...] | 方括號內的任意字符 |
[^...] | 不在方括號內的任意字符 |
. | 除換行符合其他unicode行終止符之外的任意字符 |
w | 任何ASCII符組成的的單詞,等同[a-zA-Z0-9] |
W | 任何不是ASCII符組成的的單詞,等同[^a-zA-Z0-9] |
s | 任何unicode空白字符 |
S | 任何非unicode空白符的字符,注意W與s不同 |
d | 任何ASCII數字等價于[0-9] |
D | 除了ASCII數字之外的任何字符,等價于[^0-9] |
[] | 退格直接量(特例) |
例:
/[a,b,c]/:表示和字母"a","b","c"中的任意一個都匹配
/[a-z]/:匹配拉丁字母表中的小寫字母
/[/s/d]/:匹配任意空白符或數字
3. 重復用以指定字符重復的標記
字 符 | 含 義 |
---|---|
{n,m} | 匹配前一項至少n次,但不能超過m次 |
{n,} | 匹配前一項n次或者更多次 |
{n} | 匹配前一項n次 |
? | 匹配前一項0次或者1次(也就是前一項是可選的,等價于{0,1}) |
+ | 匹配前一項1次或者多次(等價于{1,}) |
* | 匹配前一項0次或者多次,等價于{0,} |
例:
/d{2,4}/:匹配2-4個數字。
/w{3}d?/:精確匹配三個單詞和一個可選的數字。
/s+javas+/:匹配前后有1個或多個空格的字符串"java"
/[^(]*/:匹配0個或多個非左括號的字符(這里實際上能與"("匹配)
在使用"*",和"?"時要注意,由于這些字符能匹配0個字符,因此它們允許什么都不匹配,例:
/a*/能匹配字符串"bbbb",因其含有0個a。
上表中列出的匹配字符為"貪婪的"匹配,它總是盡可能多地匹配,且允許后續的正則表達式繼續匹配。
非貪婪匹配,只需在待匹配的字符后跟隨一個問號即可,"?",+?,*?或{1,5}?。例:
/a+/:匹配"aaa"時,三個字符都被匹配,
/a+?/:匹配"aaa"時,因其盡可能少的匹配,只能匹配第一個a
4.選擇-分組和引用包括:指定選擇項,自表達式分組,和引用前一子表達式的特殊字符
選擇項的嘗試匹配次序是從左到右,直到發現匹配項,若左邊成功匹配就忽略右邊的項。
正則表達式中圓括號的作用:
把多帶帶的項組成子表達式,以便于可以像處理獨立單元一樣,用|,*,+或者?等等來對單元內的項進行處理
在完整的模式中定義子模式
允許在同一正則表達式的后部,引用前面的子表達式
字 符 | 含 義 |
---|---|
"|" | "|"選擇,匹配的是該符號左邊的子表達式或右邊的子表達式 |
(...) | 組合,將幾個項組合成為一個單元,這個單元可通過"|",*,+或者?等符號,加以修飾,而且可以記住和這個相匹配的字符串以供以后的引用使用 |
(?:..) | 只組合,把項組合到一個單元,但不記憶與該組相匹配的字符 |
和第n個分組第一次匹配的字符相匹配,組是圓括號中的子表達式(也有可能嵌套的),組索引是從左到右的左括號數,"(?:形式的分組不編碼" |
例:
/ab|cd|ef/:可以匹配"ab",也可以匹配"cd",還可以匹配"ef".
/d{3}|[a-z]{4}/:可以匹配3個數字,或者4個小寫字母.
(/[a-z]+(d+)/):匹配一個或多個小寫字母后跟隨了一位或多位數字,使用括號包裹后,可以從檢索到的匹配中抽取數字了.
5.指定匹配位置我們稱這些元素為正則表達式的錨,它們將模式定位在搜索字符串的特定位置上.
字 符 | 含 義 |
---|---|
^ | 匹配字符串的開頭,在多行檢索中,匹配一行的開頭 |
$ | 匹配字符串的結尾,在多行檢索中,匹配一行的結尾 |
匹配一個單詞邊界,簡言之,就是位于字符w和W之間的位置,或位于字符w和字符串的開頭或結尾之間的位置(需要注意:[]匹配的是退格符) | |
B | 匹配非單詞邊界的位置 |
例:
/^JavaScript$/:匹配"JavaScript"單詞
/B[Ss]cript/:與"JavaScript"和"/postscript"匹配,但不與"script"與"Script".
6.修飾符說明高級匹配的規則,放在"/"符號之外,第二條斜線后
字 符 | 含 義 |
---|---|
i | 執行不區分大小寫的匹配 |
g | 執行一個全局匹配,簡言之,就是要找到所有的匹配,而不是在找到一個之后就停止 |
m | 多行匹配模式,^匹配一行的開頭和字符串的開頭,$匹配行的結束和字符串的結束 |
例:
/java$/im:可以匹配"java"也可以匹配"Java is fun"
用于模式匹配的string方法1. search():正則表達式的作用就是用來解析字符串
查找字符串,接受一個參數為正則表達式,返回返回一個與之匹配的子串的起始位置,若未找到返回-1.
例: JavaScript.search(/script/i);//返回4
search()方法不支持全局屬性檢索,所以會忽略修飾符g
2. replace():用以執行檢索與替換操作,接受兩個參數,第一個參數是一個正則,第二個是要進行替換的字符串
若第一個參數是字符串,replace()則會直接搜索這個字符串
若替換字符串中出現了$加數字,那么replace()將用與指定的子表達式相匹配的文本來替換這兩個字符.
例:
text.replace(/javascript/gi,"JavaScript");//將所有不區分大小寫的javascript都替換成,大小寫正確的JavaScript. //一段引用文本起始于引號,結束與引號. //中間的內容區域,不能包含引號 var quote = /"([^"]*)"/g; //引用中文半角引號替換英文引號,同時要保持引號之間的內容(儲存在$1中)沒有被修改. text.replace(quote,"“$1”");3. match()
接受唯一一個參數,就是正則表達式,返回的是一個由匹配結果組成的數組.例:
"1 plus 2 equals 3".match(/d+/g);//返回["1","2","3"]
若在這個正則表達式中沒有設置修飾符g,match()就不會進行全局檢索,它只檢索第一個匹配。但即使match()執行的不是全局檢索,它也返回一個數組。在這種情況下,數組的第一個元素就是匹配的字符串,余下的元素則是正則表達式中用圓括號括起來的子表達式。
因此,如果macth()返回一個數組a,那么a[0]存放的是完整的匹配,a[1]存放的是與第一個圓括號括起來的表達式相匹配的子串,以此類推。為了和方法replace()保持以后,a[n]存放的是$n的內容。
例:解析一個url
var url = /(w+)://([w.]+)/(S*)/; var text = "Visit my blog at http://www.example.com/~david"; var result = text.match(url); if (result != null) { var fullurl = result[0]; //包含 "http://www.example.com/" var protocol = result[1]; //包含 "http" var host = result[2]; //包含 "www.example.com" var path = result[3]; //包含~david }4. split()
用以將調用它的字符串拆分為子串組成的數組,使用分隔符是split()的參數
參數為字符串
"123,456,789".split(",");//返回["123","456","789"]
參數為正則
"1,2, 3,4 ,5".split(/s*,s*/)//返回["1","2"," 3","4 ","5"]
指定分隔符",",允許兩邊可以留有任意多的空白符
RegExp對象RegExp對象用以創建新的RegExp對象,可接受兩個參數,第二個可選.
RegExp對象的第一個參數為正則表達式的主體部分,也就是/...../之間的文本,無論是字符串直接量,還是正則表達式都使用""作為轉義字符的前綴.
第二個可選參數為指定正則表達式的修飾符,i,g,m或者他們的組合.參考:文本模式的則表達式-修飾符
例:
var reg = new RegExp("d{5}","g");//匹配全局模式下的5個數字 alert(reg.test("1J2a35786"));//true alert(reg.test("1J2a356"));//falseRegExp屬性
屬性名 | 類型 | 含義 |
---|---|---|
source | 只讀字符串 | 包含正則表達式的文本 |
global | 只讀布爾值 | 用以說明正則表達式是否帶有修飾g |
ignoreCase | 只讀布爾值 | 用以說明正則表達式是否帶有修飾i |
multiline | 只讀布爾值 | 用以說明正則表達式是否帶有修飾m |
lastIndex | 可讀性的整數 | 若匹配模式中含有g,這個屬性儲存在整個字符串中下一次檢索的開始位置 |
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/49636.html
摘要:基礎語法鞏固正則表達式引擎根據正則去匹配字符的時候,是通過檢查索引的方式。妻原配就是好,可以直接使用正則表達式調用它。下面解釋一下上面這些常用的元字符查找單個字符,除了換行和行結束符。正則系列文章整理到了 上一章內容:正則表達式實戰篇 知識回顧 前2章分別學習了正則表達式入門技巧,以及遇到正則需求該如何去分析問題,還有正則表達式實戰的一些場景解釋。 這一章內容偏向理論,推薦你點擊開頭的...
摘要:正則表達式理論基礎篇搬運自個人博客原址正則表達式理論基礎篇什么是正則表達式可以稱作規則一個描述字符模式的對象,正則表達式中的字母和數字,都是按照字面含義進行匹配的。 正則表達式-理論基礎篇 搬運自個人博客,原址正則表達式-理論基礎篇 什么是正則表達式?可以稱作規則一個描述字符模式的對象,正則表達式中的字母和數字,都是按照字面含義進行匹配的。強大的字符串匹配工具 如何建立一個正則表達式...
摘要:正則表達式基礎實戰篇在理論基礎篇之后呢應該就對正則表達式有了一些了解比如說如何去創建一個正則表達式以及其中的匹配規則等等那么就開始正則表達式的實戰吧建議把所有的實例在窗口敲一遍例子中展現的只是一部分配合正則表達式理論基礎篇地址原址使用效 正則表達式-基礎實戰篇 在理論基礎篇之后呢,應該就對正則表達式有了一些了解.比如說如何去創建一個正則表達式以及其中的匹配規則等等.那么就開始正則表達...
閱讀 2991·2021-10-19 11:46
閱讀 984·2021-08-03 14:03
閱讀 2942·2021-06-11 18:08
閱讀 2911·2019-08-29 13:52
閱讀 2758·2019-08-29 12:49
閱讀 487·2019-08-26 13:56
閱讀 929·2019-08-26 13:41
閱讀 851·2019-08-26 13:35