JavaScript正則爬坑

語法

直接量字符

  • \t 製表符
  • \r 回車
  • \n 換行

字符類

  • [...] 方括號內的任意字符
  • [^...]非方括號內的任意字符
  • . 除換行符和其它Unicode行終止符以外的任意字符
  • \w 等同於[a-zA-Z0-9]
  • \W 等同於[^a-zA-Z0-9]
  • \s Unicode空白符
  • \S 空白符以外的字符
  • \d 等同於[0-9]
  • \D [^0-9]

/[\s\d]/ 任意空白符和數字javascript

重複字符語法

  • {n,m} 匹配前一項至少n次,但不能超過m次
  • {n,} 匹配前一項n次或者更屢次
  • {n} 匹配前一項n次
  • ? 至關於{0,1}
    • 至關於{1,}
    • 至關於{0,}

/\d{2,3}/ 匹配2-3個數字
/\w{3}\d?/ 匹配三個單詞和一個可選的數字
/\s+java\s+/ 匹配先後帶至少一個空格的java
/[^(]*/ 匹配任意個非(字符
默認爲貪婪匹配,當在重複字符後面加上?時候爲非貪婪匹配html

'|' 的做用

用於分割供選擇的字符串
/ab|cd|ef/ 匹配 'ab' 或者 'cd' 或者 'ef'
/\d{3}|[a-z]{4}/ 匹配三位數字或者四個小寫字母java

()的做用

將單獨的項組合成子表達式,以即可以像處理一個獨立的單元那樣用'|', '+', '*', '?'進行處理,一樣能夠取得與括號中正常匹配的內容,在正則表達式中也能夠經過\後面加上數字的形式重複引用,注意這裏的數字是對應的子表達式左括號的位置(理解爲對錶達式進行分組,每組對應有下標,下標的值爲當前組左括號在表達式中的位置,使用\1這樣的語法表示的是其內容和前面所匹配的內容徹底相同,並非使用相同的規則匹配)
/java(script)?/ 匹配'java'或者'javascript'
/(ab|cd)+|ef/ 匹配ef或者ab cd的重複
/(['"])[^'"]\1/ 匹配單引號或雙引號括起來的內容正則表達式

(?:)與()的做用大體相同,但不生成引用,因此不發經過\加下標的形式訪問到,也不佔用下標位置

  • ^ 匹配字符串的開頭
  • $ 匹配字符串的結尾
  • \b 單詞的邊界
  • \B 非單詞的邊界

修飾符

  • i 用以說明不區分大小寫
  • g 匹配模式爲全局模式,即找出全部的匹配
  • m 在多行模式中執行匹配

方法

String方法

String.search()

返回第一個與之匹配的字符串的起始位置,若沒匹配到就返回-1,也能夠直接傳入字符串匹配
"JavaScript".search(/java/i) 返回0數組

String.replace()

執行檢索並替換,第一個參數是正則或者字符串,第二個參數爲要替換成的字符串
'Javascript'.replace(/script/,'Script')
若是在被替換字符串中出現了'$'加數字,那麼replace將用與指定的子表達式相匹配的文原本替換這兩個字符串
text.replace(/"([^"]*)"/g,'「$1」')降""替換成「」bash

String.match()

惟一的參數是一個正則表達式
若是正則表達式是全局匹配則返回全部匹配結果組成的數組
若是不是,則返回的值第一個值是匹配的字符串,後面則返回分組匹配的內容學習

var url = /(\w+):\/\/([\w.]+)\/(\S*)/
var text = "welcome to http://www.test.com/index.html"
var res = text.match(url);
if (res !== null) {
    console.log(res[0]) //http://www.test.com/index.html
    console.log(res[1]) //http
    console.log(res[2]) //www.test.com
    console.log(res[3]) //index.html
}
複製代碼

String.split()

降字符串按規則拆分紅數組,能夠是字符串和正則表達式url

"1,2,3,4,5,6".split(',') //[1,2,3,4,5,6]
"1, 2 ,3, 4,5 ,6".split(/\s*,\s*/) // [1,2,3,4,5,6]

複製代碼

RegExp對象

使用方法 var zipcode = new RegExp('\\d{5}','g')spa

屬性

  • RegExp.source 只讀,包含正則表達式的文本
  • RegExp.global 只讀,是否帶有修飾符g
  • RegExp.ignoreCase 只讀,是否帶有修飾符i
  • RegExp.multiline 只讀,是否帶有修飾符m
  • RegExp.lastIndex 可讀/寫,若是匹配模式帶有g修飾符,這個屬性存儲在整個字符串下一次檢索的開始位置

方法

  • RegExp.exec(string)

和String.match類似,若是沒有匹配上返回null,反則返回一個數組,返回規則與String.match相同code

var url = new RegExp('(\\w+):\/\/([\\w.]+)\/(\\S*)')
var text = "welcome to http://www.test.com/index.html"
var res = url.exec(text);
if (res !== null) {
    console.log(res[0]) //http://www.test.com/index.html
    console.log(res[1]) //http
    console.log(res[2]) //www.test.com
    console.log(res[3]) //index.html
}
複製代碼

和match不一樣的是不管是否具備全局修飾符g,exec都只會返回一個匹配結果和本次匹配的完整信息,並將lastIndex指向緊接着匹配子串的字符位置,當第二次調用時,它會從lastIndex開始匹配,若是沒有發現匹配會將lastIndex設置爲0

  • RegExp.test(string)

對字符串進行檢測,若是包含匹配結果則返回true

var pattern = new RegExp('java','i');
console.log(pattern.test('java111')) //true
console.log(pattern.test('ja1va111')) // false
複製代碼

後續整理一部分經常使用的正則表達式,學習中進步~~~

相關文章
相關標籤/搜索