#正則、(RegExp) ####正則表達式是一個描述字符模式的對象,在js中,RegExp表示正則對象。正則的功能十分強大,能夠大幅度簡化代碼。 ##正則的功能 正澤德功能能夠匹配檢索大批量數據。切使用範圍很是普遍html
script var rel = /abc/ //建立一個正則表達式給變量 var rel2 = new RegExp(/abc/)構建函數創造正則 //構建函數的第二種寫法 var rel2-1 = new RegExp(」abc「) //等同於直接寫入正則 var rel3 = RegExp(」hell 「)//將一個字符串轉化爲正則 轉換函數 script
####正則表達式的三種寫法沒有固定要求,可是若是你眼睛不瞎坑定選擇第一種。 ###基礎語法 demo:正則表達式
var str = "a1bcd" var rel = /\d/g //\d爲匹配數字 console.log(rel.test(str)) ture //測試字符串裏是否存在知足正則的內容,有爲ture 沒有爲false
以上代碼中,用來測試結果,一種很是常見的寫法。 demo:數組
var a = "abcgfjkl00"; var rle = /b/ //檢索b console.log(a.search(rle)) //檢索知足正則條件的值在字符串中的索引值
以上代碼用了search方法,用域檢索索引值。 demo:函數
var str = "123 456 789 789 asd asd "; var rel = /123/ console.log(str.match(re));匹配 match //輸出的是123 ,由於只匹配了一次想要所有匹配須要在正則後面加g var rel2 = /123/g //所有配
以上demo調用的match方法,match中文意思是匹配配對,用次方法配合正則的g轉義符能夠檢索全部哦符合正則條件的值。 ###正則的配合 使用正則配合一些方法能夠達成一些很是強大的功能測試
var str = "1231asdasd23" var rel = / \d+/; console.log (str.match(rel)); //結果只找到了一個數字
字符串中雖然存在着符合正則條件的值可是隻輸出了一個,此時若是在正則後面加一個g就能夠做用於整個字符串。code
var rel = /d/g
此經過修飾符g已經拿到了全部的數字htm
var rel = /\d+/g var str = "123 123 456" //此時修飾符+號能夠匹配任意長度的值 輸出 console.log(str.match(rel))
雖然g修飾符能夠幫咱們找出來全部知足要求的值,可是若是咱們要在數組裏面找到一串值,就只能去匹配字符串的長度來尋找,+能夠匹配任意長度的值。 ###正則的其餘寫法 雖然有許多修飾符的存在可讓處理正則表達式更加方便,若是咱們須要自定義檢索範圍盡心配對的話,仍是須要使用自定義檢索範圍的寫法對象
var rel = /<.+>g/
由於html標籤名長度和標籤類型並不固定因此使用.能夠匹配全部的標籤名,使用+能夠匹配全部長度的標籤。 ##貪婪模式 貪婪模式是由於在js中,正則表達式會在匹配成功的前提下會盡量的奪取匹配數據,而非貪婪模式,是在知足配對的條件下儘量少的去匹配數據。索引
var rel = /^\w+@[a-z0-9]+\.[a-z]{2,3}$/ //^上尖括號表示開始,$表示結束。將整個正則表達式圈起來就不會再發生貪婪模式的現象。
##中文匹配 正則當中漢字也是能夠進行配對的,配對的範圍是計算機中打出的第一個漢字到最後一個漢字 第一個是一最後一個是龥yu。 正則寫法是[\u2e80-\u9fff]這個表明了漢字的範圍; ##模式單元 ###原子 正則當中,咱們輸入的每個字符都是一個原子,原子是最基本的組成部分,也是最小的單位, ###改變優先級 在正則當中()被稱爲模式單元能夠改變優先級。ip
console.log("jack".match(/jack|rose/)); // jack
模式單元寫法:
console.log('jack'.match(/jac(k|r)ose/))
通常來說上面的代碼是不會匹配到內容,實際上正確的會被匹配到的內容應該是jackose或者jacrose ###將多個原子視爲一個原子
console.log("dds".match(/dds/)) //顯然返回的是dds
若是須要匹配多個dds就能夠將多個原子視爲一個原子 demo:
console.logconsole.log("ddsddsdds".match(/(dds){1,3}/));// //返回的shiddsddsdds
###存儲內容到內存中 正則能夠將內容村粗到內容中,而且能夠經過索引值對內存中的數據進行訪問,
console.log('aaa'.match(/aaa/)); // aaa // 咱們若是改成下面這種寫法 console.log('aaa'.match(/(a)(a)(a)/)); // 0:aaa 1:a 2:a 3:a 內容被存儲到了內存之中
由於內存容量能省則省,因此當想把數據從內存中移除的話能夠經過"?;"的形式來一處。 demo:
console.log('aaa'.match(/(?:a)(a)(a)/));// 0:aaa 1:a 2:a