兩種創(chuàng)建方式
????● 直接量
? ????????var reg = /abc/i; // i 忽略大小寫(xiě) g 全局匹配 m 多行匹配?
? ? ? ? ? ?var str = "abcd"
? ? ? ? ? ?console.log(reg.test(str)) // true?
? ? ? ? ? ? reg.test() // 判斷有沒(méi)有符合要求的片段 返回true/false
? ? ? ? ? ? str.match(reg) // 匹配符合要求的片段 返回?cái)?shù)組
? ? ? ? //?g 全局匹配
????????????var reg = /ab/;
? ? ? ? ? ? var str = "abababababab";
? ? ? ? ? ? console.log(str.match(reg)) // ["ab"]
? ??????????var reg = /ab/g;
? ???????????console.log(str.match(reg)) // ["ab", "ab", "ab", "ab", "ab", "ab"]
? ? ? ? // m 多行匹配
? ? ? ? ? ? var reg = /a/g;
? ? ? ? ? ? var str = "abcda";
? ??????????console.log(str.match(reg)) // ["a", "a"]
? ??????????var reg = /^a/g; // ^ 以a開(kāi)頭的a
? ??????????console.log(str.match(reg)) // ["a"]
????????????var reg = /a/gm;
????????????var str = "abcd\na";
? ??????????console.log(str.match(reg)) // ["a", "a"]
????● new RegExp()
? ? ? ? ? ? var reg = new RegExp("abc", "i")
? ? ? ? ? ? var str = "abcd"
? ??????????console.log(reg.test(str)) // true
表達(dá)式

var reg = /[ab][cd][d]/g;
//?var reg = /[0-9A-z][cd][d]/g;
//?var reg = /[^a][^b]/g; // ^在表達(dá)式里表示非
// var reg = /(abc|bcd)/g; // |表示或
var str =?"abcd";
console.log(str.match(reg)) // ["bcd"]
元字符

// \w === [0-9A-z_]
// \W === [^w]
var reg = /\wcd/g;
var str = "abc";
console.log(str.match(reg)); // ["bcd"]
// \d === [0-9]
// \D === [^\d]
var reg = /\d\d\d/g;
var str = "123";
console.log(str.match(reg)); // ["123"]
var reg = /\w\d/g;
var str = "s";
console.log(str.match(reg)); // ["s"]
// \s === [\t\r\n\v\f]? 包含 空格符、\t(制表符)、\r(回車(chē)符)、\n(換行符)、\v(垂直換行符)、\f(換頁(yè)符)
// \S === [^\s]
var reg = /\tc/g;
var str = "abc\tcdefgh";
console.log(str.match(reg)); // ["? ? c"]
// \b === 單詞邊界
// \B === 非單詞邊界
var reg = /\bcde/g;
var str = "abc cde fgh";
// var reg = /\bcde\B/g;
// var str = "abc cdefgh";
console.log(str.match(reg)); // ["cde"]
// . === [^\r\n]
var reg = /./g;
var str = "你好 世界";
console.log(str.match(reg)) //?["你", "好", " ", "世", "界"]
量詞

// n+ {1, Infinity}? // 1到無(wú)窮個(gè)
// n* {0, Infinity} // 0到無(wú)窮個(gè)
var reg = /\w+/g;
var str = "abc";
console.log(str.match(reg)); //?["abc"]
var reg = /\w*/g;
var str = "abc";
console.log(str.match(reg)); //?["abc", ""] // 貪婪匹配原則 能多不能少
// n? {0, 1} // 0或1個(gè)
var reg = /\w?/g;
var str = "abc";
console.log(str.match(reg)); //?["a", "b", "c", ""]
n{x} {x} // x個(gè)
var reg = /\w{2}/g;
var str = "abc";
console.log(str.match(reg)); //?["ab"]
n{x} {x,y} // x到y(tǒng)個(gè)
var reg = /\w{3,5}/g;
var str = "aaaaaaaaaaaaaaaaaa";
console.log(str.match(reg)); //?["aaaaa", "aaaaa", "aaaaa", "aaa"]
n{x, } {x,Infinity} // x到無(wú)窮個(gè)
var reg = /\w{2,}/g;
var str = "aaaaaaaaaaaaaaaaaa";
console.log(str.match(reg)); // ["aaaaaaaaaaaaaaaaaa"]
n$ // 以n結(jié)尾
var reg = /ed$/g;
var str = "abcded";
console.log(str.match(reg)); //?["ed"]
檢驗(yàn)一個(gè)字符串首尾是否含有數(shù)字
var reg = /^\d|\d$/g;
var str = "123abc";
console.log(reg.test(str)); // true
檢驗(yàn)一個(gè)字符串首尾是否都含有數(shù)字
var reg = /^\d[\s\S]*\d$/g;
var str = "123abc";
console.log(reg.test(str)); // true
屬性

var reg = /^\d[\s\S]*\d$/g;
console.log(reg.ignoreCase); // false
console.log(reg.global); // true
console.log(reg.multiline); // false
console.log(reg.source); // "/^\d[\s\S]*\d$/g"
方法

// reg.exec()
//?reg.lastIndex
var reg = /ab/g;
var str = "abababab";
console.log(reg.lastIndex);?// 0
console.log(reg.exec(str)); //?["ab", index: 0, input: "abababab", groups: undefined]
console.log(reg.lastIndex);?// 2
console.log(reg.exec(str)); //?["ab", index: 2, input: "abababab", groups: undefined]
console.log(reg.lastIndex);?// 4
console.log(reg.exec(str)); //?["ab", index: 4, input: "abababab", groups: undefined]
console.log(reg.lastIndex);?// 6
console.log(reg.exec(str)); //?["ab", index: 6, input: "abababab", groups: undefined]
console.log(reg.lastIndex);?// 8
console.log(reg.exec(str)); //?null
console.log(reg.lastIndex);?// 0
console.log(reg.exec(str)); //?["ab", index: 0, input: "abababab", groups: undefined]
匹配 xxxx
var str = "aaaabbbb";
var reg = /(\w)\1\1\1/g;
console.log(str.macth(reg)); //??["aaaa", "bbbb"]
匹配 xxyy
var str = "aabb";
var reg = /(\w)\1(\w)\2/g;
console.log(str.match(reg)); //? ["aabb"]
// match不加g和exec一樣 ↓
console.log(reg.exec(str)); //?["aabb", "a", "b", index: 0, input: "aabb", groups: undefined]
支持正則表達(dá)式的String對(duì)象方法

// search 返回第一次匹配到的位置 匹配不到返回-1
var str = "aabb";
var reg = /(\w)\1(\w)\2/g;
console.log(str.search(reg)); // 0
var str = "edbaabb";
console.log(str.search(reg)); // 3
// split
var str = "123abbc4dd5e6fgg";
var reg = /(\w)\1/
console.log(str.split(reg)); //?["123a", "b", "c4", "d", "5e6f", "g", ""]
var str = "123abbc4dd5e6fggh";
console.log(str.split(reg)); //?["123a", "b", "c4", "d", "5e6f", "g", "h"]
!// replace
var str = "aa";
console.log(str.replace("a", "b")); // ba
var reg = /a/g;
console.log(str.replace(reg, "b")); // bb
// aabb => bbaa
var reg = /(\w)\1(\w)\2/g;
var str = "aabb";
console.log(str.replace(reg, "$2$2$1$1")); // bbaa
console.log(str.replace(reg, function($, $1, $2) { // $=>正則表達(dá)式匹配的結(jié)果
? ? return $2 + $2 + $1 + $1;? // bbaa
}))
// the-first-name => theFirstName
var reg = /-(\w)/g;
var str = "the-first-name";
console.log(str.replace(reg, function($, $1) {
????return $1.toUpperCase(); //?"theFirstName"
}))
// 正向預(yù)查/正向斷言
var str = "abaaaaa";
var reg = /a(?=b)/g;
console.log(str.macth(reg)); //?["a"]
var reg = /a(?!b)/g;
console.log(str.macth(reg)); //?["a", "a", "a", "a", "a"]
// 貪婪匹配
var str = "aaaaaa";
var reg = /a+/g;
console.log(str.match(reg)); //?["aaaaaa"]
// 非貪婪匹配 加問(wèn)號(hào)
var reg = /a+?/g;
console.log(str.match(reg)); //?["a", "a", "a", "a", "a", "a"]
var reg = /a??/g;
console.log(str.match(reg)); // ["", "", "", "", "", "", ""]
// 去重
var str = "aaaaaabbbbbbcccccc";
var reg = /(\w)\1*/g;
console.log(str.replace(reg, "$1")); //?abc
// 100000000
var str = "100000000000";
var reg = /(?=(\B)(\d{3})+$)/g;
console.log(str.replace(reg, ".")); //?"100.000.000.000"