摘要:工具對象通過內(nèi)置對象支持正則,有兩種方法可實(shí)例化對象。前瞻就是在正則表達(dá)式匹配到規(guī)則的時候,向前檢查是否符合斷言,后顧后瞻方向相反。所以,為或?qū)φ齽t的匹配是兩種行為。一般是循環(huán)的寫法輸出字符串的方法例子取擴(kuò)展名替換標(biāo)簽參考慕課網(wǎng)正則
1. 工具
regexper.com
2. RegExp對象js通過內(nèi)置對象RegExp支持正則,有兩種方法可實(shí)例化RegExp對象。
// 字面量 var reg = /is/g; // 構(gòu)造函數(shù) var reg = new RegExp("is","g");
g: global全文搜索,默認(rèn)只會找一個。
i: ignoreCase 忽略大小寫,默認(rèn)大小寫敏感。
m: multipe 多行。
14個特殊符號;使用原義需轉(zhuǎn)義。
* + ? $ ^ . | ( ) { } [ ]
序號 | 符號 | 說明 |
---|---|---|
1 | * | 任意(零,一,多) |
2 | + | 一個或多個 |
3 | ? | 零個或一個 |
4 | $ | 表達(dá)式結(jié)尾 |
5 | ^ | 方括號里表示取反;表達(dá)式開始 |
6 | . | 任意字符 |
7 | | | 或 |
8 | () | 分組 |
9 | {} | 量詞 |
10 | [] | 類詞 |
序號 | 字符 | 說明 |
---|---|---|
1 | t | 水平制表符 tab |
2 | v | 垂直制表符 vertical tab |
3 | n | 換行符 line feed |
4 | r | 回車符 return |
5 | 0 | 空字符 null |
6 | f | 換頁符 form feed |
7 | cX | ctrl+X |
ab
對應(yīng)
abtab4.2 給字符歸類
[abc]指a,b,c之一4.3 字符類取反
[^abc]指除了a,b,c之外的4.4 范圍類
[a-zA-Z0-9]5. 預(yù)定義類和邊界
序號 | 字符 | 等價類 | 說明 |
---|---|---|---|
1 | . | 1 | 除了回車符和換行符之外的所有字符 |
2 | d | [0-9] | 數(shù)字 |
3 | D | 2 | 非數(shù)字 |
4 | s | [tnrfv] | space 空字符 |
5 | S | 3 | 非空字符 |
6 | w | [a-zA-Z0-9_] | word 單詞 數(shù)字大小寫字母下劃線 |
7 | W | 4 | 非單詞 |
序號 | 字符 | 含義 |
---|---|---|
1 | ^ | 以XXX開始 |
2 | $ | 以XXX結(jié)尾 |
3 | b | 單詞邊界 |
4 | B | 非單詞邊界 |
序號 | 字符 | 含義 |
---|---|---|
1 | * | 任意(零,一,多) |
2 | + | 一個或多個 |
3 | ? | 零個或一個 |
4 | {m} | m次 |
5 | {m,n} | m-n次 |
6 | {m,} | 至少m次 |
str="12345678".replace(/d{3,6}/g,"$"); console.log(str); 結(jié)果:$78
默認(rèn)貪婪模式,非貪婪模式是盡可能少的匹配。做法是在量詞后面加?
str="12345678".replace(/d{3,6}?/g,"$"); console.log(str); 結(jié)果:$$788. 分組
byron{3}匹配n三次不是byron三次。解決就是分組。
(byron){3}
和|配合使用
byr(on|en)lich{3}
反向引用捕獲組: $1 $2 ...
str="2016-12-25".replace(/(d{4})-(d{2})-(d{2})/g,"$2/$3/$1"); 結(jié)果:12/25/2016
忽略分組,在分組內(nèi)加?:
(?:Byron){3}
例子:
str="byronbyronbyron".replace(/(byron){3}/,"@$1") "@byron" str="byronbyronbyron".replace(/(?:byron){3}/,"@$1") "@$1"9. 前瞻(可加斷言)
正則表達(dá)式從文本頭部向尾部開始解析,文本尾部方向,稱為“前”。
前瞻就是在正則表達(dá)式匹配到規(guī)則的時候,向前檢查是否符合斷言,后顧/后瞻方向相反。
javaScript不支持后顧。
符合和不符合特定斷言稱為 肯定/正向 匹配和 否定/負(fù)向 匹配。
名稱 | 正則 | 例子 |
---|---|---|
正向前瞻 | exp(?=asset) | /w(?=d) |
負(fù)向前瞻 | exp(?!asset) | w(?!d) |
正向后顧 | exp(?<=asset) | 略 |
負(fù)向后顧 | exp(? | 略 |
例子:
"a2*a3".replace(/w(?=d)/g, "@") "@2*@3" "a2*a3".replace(/w(?!d)/g, "@") "a@*a@"10. js對象屬性
利用console.dir打印reg
var reg = /w/; console.dir(reg); { flags: "", global: false, ignoreCase: false, lastIndex: 0, multiline: false, source: "w", sticky: false, unicode: false, __proto__: Object }11. RegExp的test和exec函數(shù) 11.1 test
text函數(shù)用于測試字符串參數(shù)中是否存在匹配正則表達(dá)式模式的字符串;如果存在則返回true,否則返回false;
var reg=/w/; reg.test("a");true reg.test("a");true var reg=/w/g; reg.test("a");true reg.test("a");false
出現(xiàn)上面那種情況的原因是lastIndex屬性;global為false時,該屬性無效;global為true時,該屬性會記錄上一次匹配完后的位置,并且下一次查詢會從該未知開始。
var reg=/w/g; console.log(reg.test("a"),reg.lastIndex); true 1 console.log(reg.test("a"),reg.lastIndex); false 0
所以,global為true或false對正則的匹配是兩種行為。
11.2 execexec:使用正則表達(dá)式模式對字符串執(zhí)行搜索,并將更新全局RegExp對象的屬性以反映匹配結(jié)果;如果沒有匹配的文本則返回null,否則返回一個結(jié)果數(shù)組。
var reg=/wd/; reg.exec("a1b2c3d4e5f6ggg"); reg.exec("a1b2c3d4e5f6ggg"); 兩次都返回:["a1", index: 0, input: "a1b2c3d4e5f6ggg"] 數(shù)組第一個是匹配到的結(jié)果;global為false時,只會匹配一個。 數(shù)組第二個是匹配到的結(jié)果的位置,是個對象{index:0}; 數(shù)組第三個是匹配的字符串
global為true時,兩次返回的結(jié)果不一樣。
var reg=/wd/g; reg.exec("a1b2c3d4e5f6ggg"); reg.exec("a1b2c3d4e5f6ggg"); 返回: ["a1", index: 0, input: "a1b2c3d4e5f6ggg"] ["b2", index: 2, input: "a1b2c3d4e5f6ggg"]
有分組時:
var reg=/(w)d/g; reg.exec("a1b2c3d4e5f6ggg"); reg.exec("a1b2c3d4e5f6ggg"); ["a1", "a", index: 0, input: "a1b2c3d4e5f6ggg"] ["b2", "b", index: 2, input: "a1b2c3d4e5f6ggg"] 多了分組的數(shù)據(jù)。
一般是循環(huán)的寫法:
var ts = "a1b2c3d4e5f6ggg" var reg=/(w)d/g; while(ret=reg.exec(ts)){ console.log(ret.toString()); }
輸出
a1,a b2,b c3,c d4,d e5,e f6,f12. 字符串的方法 12.1 str.search
string.search(str,replaceStr); string.search(reg,replaceStr);12.2 str.mathch
string.match(str,replaceStr); string.match(reg,replaceStr);12.3 str.replace
string.replace(str,replaceStr); string.replace(reg,replaceStr); string.replace(reg,function);13. 例子
// 取擴(kuò)展名 const str = "http://file.xxx.com/test/2017/09/19/34457aef4a9649e2af2f1d4e9c14d0d3.mp4"; const reg = new RegExp("^http:[/w.]*/(w*).mp4$"); const result = reg.exec(str); console.log(result[1]);// 34457aef4a9649e2af2f1d4e9c14d0d3
// 替換source標(biāo)簽 const str = "aaabbb"; const result = str.replace(//g,""); console.log(result);// aaabbb
參考:慕課網(wǎng)js正則
文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。
轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/86893.html
摘要:控制權(quán)和傳動這兩個詞可能在搜一些博文或者資料的時候會遇到,這里做一個解釋先控制權(quán)是指哪一個正則子表達(dá)式可能為一個普通字符元字符或元字符序列組成在匹配字符串,那么控制權(quán)就在哪。 溫馨提示:文章很長很長,保持耐心,必要時可以跳著看,當(dāng)然用來查也是不錯的。 正則啊,就像一座燈塔,當(dāng)你在字符串的海洋不知所措的時候,總能給你一點(diǎn)思路;正則啊,就像一臺驗(yàn)鈔機(jī),在你不知道用戶提交的鈔票真假的時候,...
摘要:表示非單詞字符,等效于正則教程返回完整的字符串,因?yàn)?,中文算作是非單詞字符。行首行尾,修飾符形式修飾符的作用是修改和在正則表達(dá)式中的作用,讓它們分別表示行首和行尾。 正則 描述 正則 描述 f 匹配換頁符 匹配制表符 匹配換行符 v 匹配垂直制表符 匹配回車 s 匹配單個空格,等同于[f v]; S...
摘要:構(gòu)造函數(shù)可以有兩個字符串參數(shù),第一個參數(shù)包含正則表達(dá)式的主體部分。只讀的布爾值,說明這個正則表達(dá)式是否帶有修飾符。中正則的擴(kuò)展構(gòu)造函數(shù)在中,只能接受字符串作為參數(shù),允許其直接接受正則表達(dá)式作為參數(shù)。 上文傳送門:初探正則表達(dá)式 正則表達(dá)式是一個描述字符模式的對象,JavaScript 的 RegExp 類表示正則表達(dá)式,String 和 RegExp 都定義了方法,后者使用正則表達(dá)式進(jìn)...
摘要:說來慚愧,做前端快三年對于正則表達(dá)式的應(yīng)用還是很淺薄,大家都知道正則的速度基本上是最快的,但就是懶得去記那些語法和規(guī)則,這次項(xiàng)目中多次用到了需要匹配替換的動作,終于下定決心去研究一下了。 說來慚愧,做前端快三年對于正則表達(dá)式的應(yīng)用還是很淺薄,大家都知道正則的速度基本上是最快的,但就是懶得去記那些語法和規(guī)則,這次項(xiàng)目中多次用到了需要匹配替換的動作,終于下定決心去研究一下了。 實(shí)例化正則對...
摘要:最全正則表達(dá)式總結(jié)驗(yàn)證號手機(jī)號中文郵編身份證地址等是正則表達(dá)式的縮寫,作用是對字符串執(zhí)行模式匹配。學(xué)習(xí)目標(biāo)了解正則表達(dá)式語法在中使用正則表達(dá)式在中使 JS高級技巧 本篇是看的《JS高級程序設(shè)計(jì)》第23章《高級技巧》做的讀書分享。本篇按照書里的思路根據(jù)自己的理解和經(jīng)驗(yàn),進(jìn)行擴(kuò)展延伸,同時指出書里的一些問題。將會討論安全的類型檢測、惰性載入函數(shù)、凍結(jié)對象、定時器等話題。1. 安全的類型檢測...
閱讀 2990·2021-11-16 11:51
閱讀 2618·2021-09-22 15:02
閱讀 3736·2021-08-04 10:21
閱讀 3625·2019-08-30 15:43
閱讀 1959·2019-08-30 11:04
閱讀 3610·2019-08-29 17:14
閱讀 500·2019-08-29 12:16
閱讀 2943·2019-08-28 18:31