javaScript正則表達式精華
阿新 • • 發佈:2018-01-21
之前 ons 正則表達 scrip href amp exec pac ava
本文介紹javaScript正則表達式
目錄
創建正則表達式
正則表達式flag
在字符串中使用正則表達式
正則表達式的方法
元字符
特殊字符
貪婪模式
分組
創建正則表達式
var str = "I love English"; var reg = new RegExp("love", "g"); 使用構造函數創建 var reg = /love/g; 使用字面量形式
正則表達式flag
i 表示不區分大小寫 var reg = /Love/i; g 全局匹配 u uicode模式 y 粘連模式 使用粘連模式,只有指定了正確lastIndex,才會匹配元素 var str = "aa-aa-aa"
- 在字符串中使用正則表達式
search
返回給定要查找的字符第一個出現的索引位置 var str = "I love English"; var reg = /Love/i; console.log(str.search(reg)); -> 2
match
返回字符串匹配的相關信息 不使用正則 g 只匹配第一個滿足的元素 var str = "I love English"; var reg = /Love/i; console
split
分割字符串 var str = "aaCDaaCDaa"; console.log(str.split(/CD/));
replace
替換字符串一部分 var str = "aa-aa-aa"; console.log(str.replace(/-/, "A")); 替換第一個 "aaAaa-aa" console.log(str.replace(/-/g, "A")); 替換所有的 "aaAaaAaa" 第二個參數中可以使用反向引用字符 $$ 表示一個$字符 console.log(str.replace(/-/g, "$$")); -> aa$aa$aa $& 表示匹配到的字符 console.log(str.replace(/-/g, "$&$&")); -> aa--aa--aa $` 表示匹配到的字符之前的所有字符 console.log(str.replace(/-/g, "C$`")); -> aaCaaaaCaa-aaaa $‘ 表示匹配到的字符之後的所有字符 console.log(str.replace(/-/g, "C$‘")); -> aaCaa-aaaaCaaaa $n 表示匹配的字符中第幾個括號中匹配的字符 console.log(str.replace(/(-)/g, "C$1")); -> aaC-aaC-aa 第二個參數還可以使用函數 只要匹配到了都會調用此函數 console.log(str.replace(/(-)/g, function(...obj){ console.log(obj); -> ["-", "-", 2, "aa-aa-aa"] obj的參數 第一個參數,匹配的字符 第二個參數,小括號的字符 第三個參數,匹配的字符的索引位 第四個參數,原始字符 return 1 })); -> aa1aa1aa
- 正則表達式的方法
test
判斷是否有符合正則匹配的元素 console.log(/a/.test(str)); -> true 等價於 console.log(str.search(/a/) != -1);
exec
exec用來提取匹配的元素 不使用g,作用和不用g的match方法是一樣的 var str = "aa-aa-aa"; console.log(/-/.exec(str)); -> ["-", index: 2, input: "aa-aa-aa"] 使用g,重復調用exec逐步向後查找 var str = "aa-aa-aa"; var reg = /-/g; console.log(reg.exec(str)); -> ["-", index: 2, input: "aa-aa-aa"] console.log(reg.exec(str)); -> ["-", index: 5, input: "aa-aa-aa"] 全部找出匹配的元素 let result = null; while(result = reg.exec(str)){ console.log(result); }
元字符
\d 數字0~9 \s 空字符spaces,tabs,newlines \w 字母 a-ZA-Z_ \b 簡單點理解,是用來表示\w單詞的邊界 "1 11 111 22".match(/\b\d\d\b/g) -> ["11", "22"] \D 非數字字符 \S 非空格字符 \W 非字母字符 \B 非邊界 . 匹配任意字符,除了newlines
特殊字符
需要轉義的字符 . ( ) \ / [ ] []用法 [abc] 表示多個字符中的一個 [a-z] [^abc] 表示除了abc以外的字符 量詞 \d{5} 表示5個數字 \d{3,5} 表示 >=3 <=5 個字符 \d{3,} 表示 >=3 個字符 + 一個或一個以上 ? 0個或者一個 * 0個或者多個 或 a|b|c 精確匹配 /^abc$/
貪婪模式
在使用量詞的時候,默認是開啟貪婪模式的 let str = "today is a ‘good day‘, isn‘t it?" console.log(str.match(/‘.+‘/)); -> ["‘good day‘, isn‘", index: 11, input: "today is a ‘good day‘, isn‘t it?"] 取消貪婪模式 console.log(str.match(/‘.+?‘/)); -> ["‘good day‘", index: 11, input: "today is a ‘good day‘, isn‘t it?"] console.log(str.match(/‘[^‘]+‘/)) -> ["‘good day‘", index: 11, input: "today is a ‘good day‘, isn‘t it?"]
分組
使用圓括號可以提取組 let str = "aa-bb-aa"; console.log(str.match(/(a)+/)); -> ["aa", "a", index: 0, input: "aa-bb-aa"] 取消捕獲組 console.log(str.match(/(?:a)+/)); -> ["aa", index: 0, input: "aa-bb-aa"] 分的組可以直接在正則表達式中引用 console.log(str.match(/(a)\1/)); -> ["aa", "a", index: 0, input: "aa-bb-aa"]
javaScript正則表達式精華