當前位置:
首頁 >
前端技术
> javascript
>内容正文
javascript
JavaScript正则表达式-基础入门
生活随笔
收集整理的這篇文章主要介紹了
JavaScript正则表达式-基础入门
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
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] | 退格直接量(特例) |
重復
| {n,m} | 匹配前一項至少n次,但不能超過m次 |
| {n, } | 匹配前一項n次或者更多次 |
| {n} | 匹配前一項n次 |
| ? | 盡可能多地匹配前一項0或者1次 |
| + | 盡可能多地匹配前一項1次或多次 |
| * | 盡可能多地匹配前一項0或多次 |
| {n,m}? | 盡可能少地匹配前一項至少n次,但不能超過m次 |
| ?? | 盡可能少地匹配前一項0或者1次 |
| +? | 盡可能少地匹配前一項1次或多次 |
| *? | 盡可能少地匹配前一項0或多次 |
選擇
字符 '|' 用于提供可選擇的字符
注意兩點:
分組和引用
(...)有三個作用:
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\b/ ) // 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\nJava".match( /^Java$/ ) // null"JavaScript\nJava".match( /^Java$/m ) // ["Java"]直接量符號
| \o | NUL字符(u0000) |
| \t | 制表符(u0009) |
| \n | 換行符(u00A) |
| \v | 垂直制表符(u000B) |
| \f | 換頁符(u000C) |
| \r | 回車符(u000D) |
| \xnn | 由16進制數nn指定的拉丁字符 |
| \uxxxx | 由16進制數xxxx指定的Unicode字符 |
| \cX | 控制字符 |
可用于模式匹配的String方法
// 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"]總結
以上是生活随笔為你收集整理的JavaScript正则表达式-基础入门的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: java web 的粗粒度权限管理
- 下一篇: NUMA架构的CPU -- 你真的用好了