語法
直接量字元
- \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]/
任意空白符和數字
重複字元語法
- {n,m} 匹配前一項至少n次,但不能超過m次
- {n,} 匹配前一項n次或者更多次
- {n} 匹配前一項n次
- ? 相當於{0,1}
-
- 相當於{1,}
-
- 相當於{0,}
/\d{2,3}/
匹配2-3個數字
/\w{3}\d?/
匹配三個單詞和一個可選的數字
/\s+java\s+/
匹配前後帶至少一個空格的java
/[^(]*/
匹配任意個非(字元
預設為貪婪匹配,當在重複字元後面加上?時候為非貪婪匹配
'|' 的作用
用於分割供選擇的字串
/ab|cd|ef/
匹配 'ab' 或者 'cd' 或者 'ef'
/\d{3}|[a-z]{4}/
匹配三位數字或者四個小寫字母
()的作用
將單獨的項組合成子表示式,以便可以像處理一個獨立的單元那樣用'|', '+', '*', '?'進行處理,同樣可以取得與括號中正常匹配的內容,在正規表示式中也可以通過\後面加上數字的形式重複引用,注意這裡的數字是對應的子表示式左括號的位置(理解為對錶達式進行分組,每組對應有下標,下標的值為當前組左括號在表示式中的位置,使用\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”')
降""替換成“”
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()
降字串按規則拆分成陣列,可以是字串和正規表示式
"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')
屬性
- RegExp.source 只讀,包含正規表示式的文字
- RegExp.global 只讀,是否帶有修飾符g
- RegExp.ignoreCase 只讀,是否帶有修飾符i
- RegExp.multiline 只讀,是否帶有修飾符m
- RegExp.lastIndex 可讀/寫,如果匹配模式帶有g修飾符,這個屬性儲存在整個字串下一次檢索的開始位置
方法
- RegExp.exec(string)
和String.match相似,如果沒有匹配上返回null,反則返回一個陣列,返回規則與String.match相同
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
複製程式碼
後續整理一部分常用的正規表示式,學習中進步~~~