摘要:基本概念正則表達式是一種文本模式,包括普通字符例如,到之間的字母和特殊字符稱為元字符。所以還要對正則的啟始位置進行限制第一部分簡單回顧了正則表達式的基礎知識,下一部分重點介紹正則的分組語法和常用方法
前言
正則表達式在編碼中會經常使用到,但是平時只是需要的時候就去看看。往往看到那些元字符、量詞就直接跳過,直接百度了,一直沒有很深入的去了解,現在有時間就簡單總結一下。
基本概念正則表達式是一種文本模式,包括普通字符(例如,a 到 z 之間的字母)和特殊字符(稱為“元字符”)。模式描述在搜索文本時要匹配的一個或多個字符串。
正則使用場景:
1. 檢查文本中是否含有指定的特征詞 2. 找出文中匹配特征詞的位置 3. 從文本中提取信息,比如:字符串的子串 4. 修改文本元字符
元字符是在正則表達式中你有特殊含義的非字母字符。元字符必須轉義
修飾符( ) [ ] { } ^ $ | ? * + .
g: global,全文搜索,如果不添加,搜索到第一個匹配就停止。
i: ignore case,忽略大小寫,默認大小寫敏感。
m: mutiple lines,多行搜索
字符類匹配字符 | 匹配 |
---|---|
[...] | 匹配方括號內的任意字符 例如[abcd] |
[^ x ] | 匹配除了x以外的任意字符 例如 [^abcd] 匹配除了abcd以外的任意字符 |
. | 匹配除了換行符 |
s | 匹配任意的空白符 |
S | 匹配任意不是空白符的字符 |
w | 匹配字母或者數字、下劃線、漢字 等價于[a-zA-Z0-9] |
W | 匹配不是字母或者數字、下劃線、漢字 |
d | 匹配任意數字 |
D | 匹配任意非數字的字符 |
匹配單詞的開始或者結束的位置 |
字符 | 匹配 |
---|---|
{n,m} | 匹配前一項至少n次,但不能超過m次 |
{n,} | 匹配前一項n次或更多次 |
{n} | 匹配前一項n次 |
? | 匹配前一項0次或者1次,也就是說前一項是可選的,等價于{0,1} |
+ | 匹配前一項1次或多次,等價于{1,} |
* | 匹配前一項0次或多次,等價于{0,} |
元字符/元符號 | 匹配 |
---|---|
$ | 匹配字符串的結尾,在多行檢索中,匹配一行的結尾 |
^ | 匹配字符串的開頭,在多行檢索中,匹配一行的開頭 |
A | 只有匹配字符串開始處 |
b | 匹配單詞邊界,詞在 []內時無效 |
B | 匹配非單詞邊界 |
G | 匹配當前搜索的開始位置 |
匹配字符串結束處或行尾 | |
z | 只匹配字符串結束處 |
元字符/元符號 | 匹配情況 |
---|---|
(string) | 用于反向引用的分組 |
1 或$1 | 匹配第一個分組中的內容 |
2 或$2 | 匹配第二個分組中的內容 |
3 或$3 | 匹配第三個分組中的內容 |
字符 含義 i 執行不區分大小寫的匹配 g 執行一個全局匹配,即找到所有匹配而非一次匹配 m 多行匹配模式,^匹配一行的開頭和字符串開頭,$匹配行的結束和字符串的結尾構造方式
1.字面量
var pattern = /is/g;
eg:var reg1=/hello world (w*)/gi;
2.構造函數
var pattern = new RegExp("is", "g"); new RegExp("正則表格式字符串",正則表達式修飾符); 注意??: 因為構造函數中使用的是字符串,由于字符串轉義問題,""代表""。RegExp對象方法
RegExp對象給我們提供了三種方法供我們使用,分別是test()、exec()和compile()。下面具體說一下這三個方法的用處。
1.test()
檢索字符串中指定的值。返回 true 或 false。這個是我們平時最常用的方法。
var reg=/hello w{3,12}/; alert(reg.test("hello js"));//false alert(reg.test("hello javascript"));//true
2.exec()
檢索字符串中指定的值。匹配成功返回一個數組,匹配失敗返回null。
var reg=/hello/; console.log(reg.exec("hellojs"));//["hello"] console.log(reg.exec("javascript"));//null
3.compile()
compile() 方法用于改變 RegExp。
compile() 既可以改變檢索模式,也可以添加或刪除第二個參數。
var reg=/hello/; console.log(reg.exec("hellojs"));//["hello"] reg.compile("Hello"); console.log(reg.exec("hellojs"));//null reg.compile("Hello","i"); console.log(reg.exec("hellojs"));//["hello"]舉幾個例子
1.匹配下面的電話號碼:
1. (010)88886666 2. 022-22334455 3. 02912345678 /(?0d{2}[)-]?d{8}/;
驗證如下
var regex = /(?0d{2}[)-]?d{8}/; regex.test(" 02912345678") regex.test(" 022-22334455") regex.test("(010)88886666") true
2.匹配ip地址
IP地址格式可表示為:XXX.XXX.XXX.XXX,XXX取值范圍是0-255,前三段加一個.重復了三次,在與最后一段合并及組成IP地址的完整格式。
最簡單的寫法 /([0-9]{1,3}.){3}[0-9]{1,3}/
但是這樣會匹配到很多無效的ip xxx的范圍超過255.
所以對這個寫法進行改進
當xxx只有一位的時候 取值的范圍是[1-9] 可以表示為[1-9]
當xxx為兩位時 取值范圍為[0-99] 可以表示為 [1-9]d
當xxx為三位數時最高位取值為1 取值范圍為[100 - 199] 可以表示為[1]d{2}
最高位取值為2 第二位不超過5時 取值范圍為[200 - 249] 可以表示為2[0-4]d
最高位取值為2,十位取值5,個位取值0-5 取值范圍為 [250 - 255] 表示為 25[0-5]
將這三種情況合并可以表示(25[0-5]|2[0-4]d|((1d{2})|([1-9]?d)))
整個ip的正則可以表示為
((25[0-5]|2[0-4]d|((1d{2})|([1-9]?d))).){3}(25[0-5]|2[0-4]d|((1d{2})|([1-9]?d)))
但是這還存在問題 現在只要字符串中有一部分能夠通過校驗test就會返回true 例如2313.2.3.4。
var regex = /((25[0-5]|2[0-4]d|((1d{2})|([1-9]?d))).){3}(25[0-5]|2[0-4]d|((1d{2})|([1-9]?d)))/; regex.test("3424.2.3.2"); true
所以還要對正則的啟始位置進行限制
var regex = /^((25[0-5]|2[0-4]d|((1d{2})|([1-9]?d))).){3}(25[0-5]|2[0-4]d|((1d{2})|([1-9]?d)))$/; regex.test("3424.2.3.2"); false
第一部分簡單回顧了正則表達式的基礎知識,下一部分重點介紹正則的分組語法 和 常用方法
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/90001.html
摘要:選擇分組和引用正則表達式的語法還包括指定選擇項子表達式分組和引用前一子表達式的特殊字符。帶圓括號的表達式的另一個用途是允許在同一正則表達式的后部引用前面的子表達式。 正則表達式(regular expression)是一個描述字符模式的對象。JavaScript的 RegExp類 表示正則表達式,String和RegExp都定義了方法,后者使用正則表達式進 行強大的模式匹配和文本檢索與...
摘要:控制權和傳動這兩個詞可能在搜一些博文或者資料的時候會遇到,這里做一個解釋先控制權是指哪一個正則子表達式可能為一個普通字符元字符或元字符序列組成在匹配字符串,那么控制權就在哪。 溫馨提示:文章很長很長,保持耐心,必要時可以跳著看,當然用來查也是不錯的。 正則啊,就像一座燈塔,當你在字符串的海洋不知所措的時候,總能給你一點思路;正則啊,就像一臺驗鈔機,在你不知道用戶提交的鈔票真假的時候,...
摘要:正則表達式語法字符與字符類特殊字符以上特殊字符要想使用字面值,必須使用進行轉義字符類包含在中的一個或者多個字符被稱為字符類,字符類在匹配時如果沒有指定量詞則只會匹配其中的一個。 1. 正則表達式語法 1.1 字符與字符類 1 特殊字符:.^$?+*{}| 以上特殊字符要想使用字面值,必須使用進行轉義 2 字符類 1. 包含在[]中的一個或者多個字符被稱為字符類,字符類在匹配時如果沒有指...
摘要:的正則表達式體系是參照建立的。字面量形式構造函數形式以上都是創建了一個內容為的正則表達式,其表示對一個手機號碼的校驗。按照給定的正則表達式進行替換,返回替換后的字符串。 正則表達式,也稱規則表達式,經常使用其來完成對字符串的校驗和過濾。由于正則表達式的靈活性、邏輯性和功能性都非常強大,而且 可以利用很簡單的方式完成對復雜字符串的控制,所以很多程序語言都支持正則表達式。在JavaScri...
摘要:正則表達式的意義中的正則表達式使用表示,可以使用構造函數來創建對象,不過對象更多的是通過一種特殊的直接量語法來創建。用構造函數也可以定義一個與之等價的正則表達式,代碼如下正則表達式的模式規則是由一個字符序列組成的。 正則表達式的模式匹配 正則表達式(regular expression)是一個描述字符模式的對象。javascript的RegExp對象表示正則表達式,String和Reg...
閱讀 3044·2021-11-22 09:34
閱讀 3636·2021-08-31 09:45
閱讀 3836·2019-08-30 13:57
閱讀 1670·2019-08-29 15:11
閱讀 1681·2019-08-28 18:04
閱讀 3218·2019-08-28 17:59
閱讀 1558·2019-08-26 13:35
閱讀 2188·2019-08-26 10:12