正則是處理字符串的一種規則 JS中的正則具體體現出來是一種數據類型 RegExp ,是一種引用數據類型數據javascript
var reg = /q/
複製代碼
涉及到變量時候會偶爾用new的方式建立正則,通常都是字面量的方式java
var reg = new RegExp('q')
複製代碼
正則雙斜槓中的內容 咱們稱爲元字符,斜槓外邊的內容咱們稱爲修飾符 經常使用的元字符能夠分爲 有特殊含義的元字符量次元字符 普通元字符數組
var str = '2019-9-23';
// str = str.replace(/-/g, '/');
console.log(str.replace(/-/g,'/'));
var ary = ['qqq', 'www', 'yyy'];
var arr = ary.map(item => new RegExp(item)) ;
console.log(arr);
複製代碼
寫一個正則 去匹配字符串,字符串中有符合正則 的字符就返回true,不然就返回falsebash
<script>
var reg = /d/;//匹配字符串中的d
console.log(reg.test('nnj07vgh'));//false
console.log(reg.test('ndjjkjk'));//true
var reg = /\d/;
console.log(reg.test('jjsjkj'));//false
console.log(reg.test('9bbjh'));//true
var reg = /\d{2}/;//至少出現連續的兩個數字
console.log(reg.test('9'));
console.log(reg.test('99'));
console.log(reg.test('jknk0bhj'));
console.log(reg.test('jknk0865bhj'));
var reg = /\\d/;//第一個\表明轉義把第二個\轉成了不具備轉義意義的字符\ 正則的意思就是匹配字符\d
console.log(reg.test('99h'));//f
console.log(reg.test('bhj\ddd98yv'));//f
console.log(reg.test('\\d'));//t
var reg = /^\d.123$///以數字開頭以3結尾 3前邊是個12 12前邊是一個除了換行符之外的任意字符
console.log(reg.test('8\n123'));
console.log(reg.test('8.123'));
console.log(reg.test('8n123'));
var reg = /^\d\.123$/;//. 再也不表明正則中除了換行符之外的任何 而是隻表明一個普通字符. 此正則表明以任意數字開頭 以3結尾 中間是.12
console.log(reg.test('3.123'));
console.log(reg.test('5n123'));
var reg = /[a-c]/; // 只要有一個 a或者b或者c ; 結果就是true
console.log(reg.test('aqweaqe'))
var reg = /^[a-c]/; // 只要以 a或者b或者c 開頭的字符串; 結果就是true
var reg = /^[a-c]{2}/; // 只要以 a到c之間的任意兩個字符開頭的字符串 結果都是true;
var reg = /[a-z0-9]/; // 小寫字母和數字
var reg = /[0-9a-z]/;// 小寫字母和數字
var reg = /[0-9a-zA-Z_]/; // \w
var reg = /[.]/ // 中括號中的點 表明 點 自己;
var reg = /^18|19/;//以18開頭 或者有19;或的優先級高
var reg = /18|19$/;//含有18 或以19結尾
var reg = /^18|19$/;//以18開頭 或以19結尾
var reg = /^(18|19)$/;//18 19/^1[89]$/
</script>
複製代碼
有效數字:能夠有正負號,能夠有小數部分,整數部分不能以0開頭函數
var reg = /^[-+]?([1-9]\d|\d+)(\.\d+)?$/
複製代碼
前邊6位行政區號 4位年份2位月份2位天,最後一位多是隨意數字 也多是Xui
let reg=/^\d{6}(\d{4})(\d{2})(\d{2})\d{2}(\d)(\d|X)$/;\d[\d|X]/
複製代碼
reg .exec(str) :從字符串中獲取 知足正則的字符spa
var reg = /\d+/;
var str = 'hello2019hello2020';
console.log(reg.exec(str));
複製代碼
exec 捕獲結果 :exec的返回結果是一個數組 第一項是大正則捕獲的內容,第二項及之後是小分組捕獲到的內容 第二項式第一個小分組; 第三項是第二個小分組 若字符串中沒有任何符合正則的內容 ,則獲取到的內容就是一個nullcode
var reg = /([a-z]+)(\d+)/
var str = 'hello2019hello2020';
console.log(reg.exec(str))
複製代碼
一次性會把全部知足正則的字符都捕獲到 解決正則的貪婪性:加?regexp
var reg = /\d+?/;
var str = 'hello2019hello2020';
console.log(reg.exec(str));
複製代碼
只捕獲一次,再也不不厚其餘符合正則的字符 經過添加全局修飾符g 解決;索引
每個正則都有一個lastIndex屬性,不加全局修飾符g 的時候,lastIndex 的 值是0;加了g以後,每次匹配或者捕獲都會更新lastIndex值,下一次捕獲的lastIndex是 上一次捕獲結束的位置
加上g以後,每次捕獲時都會更新lastIndex 屬性 lastIndex屬性控制的是下一次開始匹配的起始索引 test 和 exec都會更新lastIndex屬性
var reg =/([a-z]+)(\d+)/g;
var str = 'bye2019hello2020';
console.log(reg.exec(str));
console.log(reg.exec(str));
複製代碼
match方法是配合正則使用,用於捕獲符合正則的字符
var reg = /([a-z]+)(\d+)/
var str = 'ff2019ff2020';
console.log(reg.exec(str));
console.log(str.match(reg));
複製代碼
在不加全局修飾符g的時候,match和exec捕獲到的內容一致
var reg = /([a-z]+)(\d+)/g;
var str = 'zf2019zf2020';
console.log(reg.exec(str));
console.log(str.match(reg));
複製代碼
正則加了全局修飾符g ,用match方法去捕獲字符串的時候,只捕獲大正則到的內容,會忽略小分組的內容
split方法能夠把字符串轉成數組,用法:用括號中的參數去切割字符串,把分割的兩部分放到數組中,能夠配合正則使用
var str = '2019-09-30';
var res = str.split(/\-/g);
console.log(res);//=>['2019','09','30']
複製代碼
replace 方法是把字符串的xxx換成xxx2。replace方法有兩個參數,第一個參數能夠是字符、正則,第二個參數能夠是字符或者回調函數
replace中的回調函數的實參結果跟match 和exec 方法獲取到的內容相似,返回的字符串是由匹配到的內容被return值 替換以後的新字符串,回調函數的執行次數跟正則匹配到的次數一致,有多少個知足的就會執行幾回
var str = '2019ff2020jy09';
var res = str.replace(/(\d+)([a-z]+)/g,function(){
console.log(arguments);
})
複製代碼
var str = '1+2+3+4+5';
var res = str.replace(/\+/g,function(){
return =;
});
console.log(res);//=>'1=2=3=4=5'
複製代碼
var str = 'wer2312gsgsd345sdfgs345qwe324'
var res = str.replace(/([a-z]+)(\d+)/g,'$1===$2===').replace(/=+$/,'');
// $1 $2 $3 ... 分別表明第一個小分組第二個小分組;
console.log(res)
複製代碼