摘要:正則表達式基礎入門字符類,如為匹配任何字符組成的字符重復如為匹配一到三個單詞選擇分組和引用指定匹配位置修飾符直接量字符可用于模式匹配的方法對象基本要素字符類方括號內的任意字符不在方括號內的任意字符除換行符和其他行終止符之外的任意字符任何字
JavaScript正則表達式-基礎入門
字符類,如 /w/ 為匹配任何ASCII字符組成的字符
重復, 如 /w{1,3}/ 為匹配一到三個單詞
選擇、分組和引用
指定匹配位置
修飾符
直接量字符
可用于模式匹配的String方法
RegExp對象
基本要素 字符類[...] | 方括號內的任意字符 |
1 | 不在方括號內的任意字符 |
. | 除換行符和其他Unicode行終止符之外的任意字符 |
w | 任何ASCII字符組成的單詞,等價于[a-zA-Z0-9] |
W | 任何不適ASCII字符組成的單詞,等價于2 |
s | 任何Unicode空白符 |
S | 任何非Unicode空白符的字符,注意w和S不同 |
d | 任何ASCII數字,等價于[0-9] |
D | 除了ASCII數字之外的任何字符,等價于3 |
[] | 退格直接量(特例) |
// 匹配字符串中的 "b" "abc".search( /[b]/ ) // 1 // 匹配字符串中的 方括號內規定的數字 "abc123abc".search( /[2-5]/ ) // 4重復
{n,m} | 匹配前一項至少n次,但不能超過m次 |
{n, } | 匹配前一項n次或者更多次 |
{n} | 匹配前一項n次 |
? | 盡可能多地匹配前一項0或者1次 |
+ | 盡可能多地匹配前一項1次或多次 |
* | 盡可能多地匹配前一項0或多次 |
{n,m}? | 盡可能少地匹配前一項至少n次,但不能超過m次 |
?? | 盡可能少地匹配前一項0或者1次 |
+? | 盡可能少地匹配前一項1次或多次 |
*? | 盡可能少地匹配前一項0或多次 |
// 匹配2~4個數字,{n,m}中的逗號兩邊不能有空格 "a1ab12abc123".search( /d{2,4}/ ) // 4 // 精確匹配三個字母和一個可選的數字 "at12a3abcd1abc123".search( /[a-zA-Z]{3}d?/ ) // 6 // 匹配前后帶有一個或多個空格的字符串"JavaScript" "JavaScripttttt is notJavaScript( JavaScript )".search( /s+JavaScripts+/ ); // 32 // 盡可能多 "aaa".match( /a+/ ); // ["aaa"] // 盡可能少 "aaa".match( /a+?/ ); // ["a"]選擇
字符 "|" 用于提供可選擇的字符
注意兩點:
1. 匹配次序 從左到右 2. 如果左邊的選擇匹配成功,就忽略右邊的匹配項
// 匹配三個數字或者是4個小寫字母 "1ab12ab123abcd".match( /d{3}|[a-z]{4}/ ) // ["123"]分組和引用
(...)有三個作用:
1. 把多帶帶的項組合成子表達式 2. 在完成的模式中定義子模式 3. 允許在同一正則表達式的后部引用前面的子表達式 , 使用1代表第一個左括號的內容,2代表第二個左括號的內容,依次類推
// 1.匹配字符串"Java",其后的"Script"可有可無 "JavaSScript".match( /Java(Script)?/ ) // ["Java", undefined] // 2.匹配左右為字母中間為數字的字符串,同時取出中間的字符串 "123abc454cba321".match( /[a-z]+(d+)[a-z]+/ ) // ["abc454cba", "454"] // 3.允許在同一正則表達式的后面引用前面的子表達式 ""Java"S"cript"".match( /[""][^""]*[""]/ ); // [""Java""] 引號左右不匹配 ""Java"S"cript"".match( /([""])[^""]*1/ ); // [""S"", """] 引號左右匹配
(...) | 將幾個項組合為一個單元,這個單元可通過"*"、"+"、"?"和"|"等符號加以修飾 |
(?:...) | 只組合,把項目組合到一個單元,但不記憶與該組相匹配的字符 |
n | 和第n個分組第一次匹配的字符相匹配,組是圓括號中的子表達式,組索引是從左到右的左括號數 |
^ | 匹配字符串的開頭,在多行檢索中,匹配一行的開頭 |
$ | 匹配字符串的借位,在多行檢索中,匹配一行的結尾 |
b | 匹配一個單詞的邊界(區分[b]匹配的是退格符) |
B | 匹配非單詞邊界的位置 |
(?=p) | 零寬正向先行斷言,要求接下來的字符都與p匹配,但不能包括匹配p的那些字符 |
(?!p) | 零寬負向先行斷言,要求接下來的字符不與p匹配 |
b、^ 和 $ 稱為正則表達式的錨,定位搜索字符串的特定位置
// 匹配單詞的邊界,即位于w字符和W之間的邊界 "htmlhtml html".search( /html/ ) // 0 "htmlhtml html".search( /html/ ) // 4 // 匹配一個單詞 " JavaScript".match( /^JavaScript$/ ) // null "JavaScript".match( /^JavaScript$/ ) // ["JavaScript"]
(?=p)和(?!p)指定接下來的字符是否與p匹配
// 第二個不能匹配是因為Java后面不是空格符 "JavaScript is good.".match( /[Jj]ava(Script)?(?=s)/ ) // ["JavaScript", "Script"] "Javais good.".match( /[Jj]ava(Script)?(?=s)/ ) // null修飾符
i | 執行不區分大小寫的匹配 |
g | 執行一個全局匹配 |
m | 多行匹配模式,^匹配一行的開頭和字符串的開頭,$匹配行的結束和字符串的結束 |
修飾符用在“/”符號之后
// i 即為igonre case "JAVASCRIPT".match( /javascript/ ) // null "JAVASCRIPT".match( /javascript/i ) // ["JAVASCRIPT"] // g 即為global "JavaScript Java".match( /Java/ ) // ["Java"] "JavaScript Java".match( /Java/g ) // ["Java", "Java"] // m 即為multiline "JavaScript Java".match( /^Java$/ ) // null "JavaScript Java".match( /^Java$/m ) // ["Java"]直接量符號
o | NUL字符(u0000) |
制表符(u0009) | |
換行符(u00A) | |
v | 垂直制表符(u000B) |
f | 換頁符(u000C) |
回車符(u000D) | |
xnn | 由16進制數nn指定的拉丁字符 |
uxxxx | 由16進制數xxxx指定的Unicode字符 |
cX | 控制字符 |
// search(),返回與之匹配子串的起始位置 "JavaScript".search( /script/i ); // 4 // match() , 返回由匹配結果組成的數組 "Java is not JavaScript".match( /java(script)?/gi ) // ["Java", "JavaScript"] // replace(), 檢索和替換 "java is not JavaScript".replace( /java/i , "C++" ).replace( /javascript/i , "C") // "C++ is not C" // split() , 將字符串拆分為一個子串組成的數組 " 1 , 2, 3 ,4 , 5 ".trim().split( /s*,s*/ ) // ["1", "2", "3", "4", "5"]RegExp對象
RegExp()為一個構造函數
// 第一個參數為 正則表達式的主體部分,第二個參數為 修飾符 let reg = new RegExp( "java(script)?" , "gi" ); "Java is not JavaScript".match( reg ) // ["Java", "JavaScript"]小結
此文章是參照了《JavaScript: The Definitive Guide》中的第十章,想仔細了解JavaScript的正則表達式可以去翻閱此書籍。
解析一個URL使用/(w+)://([w.]+)/(S*)/
"Welcome to https://segmentfault.com/t/javascript".match( /(w+)://([w.]+)/(S*)/ ) // ["https://segmentfault.com/t/javascript", "https", "segmentfault.com", "t/javascript"]
... ?
a-zA-Z0-9 ?
0-9 ?
文章版權歸作者所有,未經允許請勿轉載,若此文章存在違規行為,您可以聯系管理員刪除。
轉載請注明本文地址:http://specialneedsforspecialkids.com/yun/81818.html
摘要:前言正則表達式時處理字符串中常用的手法,本文以簡單的方式,快速展示了中正則相關的基礎知識點。文末還提供了幾個簡單的正則相關面試題。接下來是正則部分,注意后面的并不匹配,也就是比如,實際匹配的值是和,在和后面加上,就完成了預期。 前言:正則表達式時處理字符串中常用的手法,本文以簡單的方式,快速展示了JavaScript中正則相關的基礎知識點。文末還提供了幾個簡單的正則相關面試題。個人總結...
摘要:寫一個正則表達式來測試變量中是否包含字符串。用函數給出不使用字符,但和等價的正則表達式。第十四課標志全局匹配標志第二個常用的標志是全局匹配標志,用字母表示。寫出一個正則表達式來檢驗合法性。非捕獲組的主要用途是給一個組賦予量詞。 TRY REGEX 是一個交互式的正則表達式學習項目項目地址:https://github.com/callumacra...在線地址:http://tryre...
摘要:特意對前端學習資源做一個匯總,方便自己學習查閱參考,和好友們共同進步。 特意對前端學習資源做一個匯總,方便自己學習查閱參考,和好友們共同進步。 本以為自己收藏的站點多,可以很快搞定,沒想到一入匯總深似海。還有很多不足&遺漏的地方,歡迎補充。有錯誤的地方,還請斧正... 托管: welcome to git,歡迎交流,感謝star 有好友反應和斧正,會及時更新,平時業務工作時也會不定期更...
閱讀 917·2021-11-24 09:38
閱讀 925·2021-11-23 09:51
閱讀 2939·2021-11-16 11:44
閱讀 1762·2021-09-22 15:52
閱讀 1626·2021-09-10 11:20
閱讀 1361·2019-08-30 13:47
閱讀 1291·2019-08-29 12:36
閱讀 3293·2019-08-26 10:43