正規表達式
https://www.w3school.com.cn/jsref/jsref_obj_regexp.asp
補充知識:
轉義字元“\”
\n 回車 換行
\r 行結束符
\t tab
多行字元串
-
RegExp 對象
正規表達式的作用:比對特殊字元或有特殊搭配原則的字元的最佳選項
兩種建立方式
- 直接量
var reg = /abc/
// 正規表達式bac
- new RegExp();
var reg = new RegExp("abc");
注意:
var reg = /abce/m;
var reg1 = new RegExp(reg); //傳回的是新的一個正規表達式
var reg2 = RegExp(reg); // 不加new傳回的是一個引用
- 屬性:
- i :ignorecase忽視大小寫
- g:執行全局比對(查找所有比對而非在找到第一個比對後停止)。
var reg = /ab/g;
var str = "abababababab";
//str.match(reg);
//(6) ["ab", "ab", "ab", "ab", "ab", "ab"]
- m:多行比對
var reg = /^a/gm; // 以a為開頭的字元串 “^”
var str = "abababab\nabab";
str.match(reg);
// (2) ["a", "a"]
-
方法:
reg.test()
str.math()’
- 表達式
方括号 :一個 [ ] 是一個表達式,代表1位,裡面是他的區間
[abc] 查找方括号之間的任何字元。
var reg = /[1234567890][1234567890][1234567890]/g
var str = "123dsviul9745gdh456"
/*
str.match(reg)
(3) ["123", "974", "456"]
*/
[^]: ^ 放在裡面表示“非”
(red|blue|green) 查找任何指定的選項。
var reg = /(abc|bcd)/g; //第一1位比對abc或bcd
- 元字元
\w 就是word
\w === [0-9A-z_]
\W === [^\w]
\d === [0-9];
\D === [^d];
\s === [\t\n\r\v\f ]
\S === [^s];
\b 單詞邊界
\B 非單詞邊界
\n 查找換行符。
\f 查找換頁符。
\r 查找回車符。
\t 查找制表符。
var reg= /\tc/g
var str = "_abc\tcde"
//必需是真是存在的/t
\v 查找垂直制表符。
\uxxxx 查找以十六進制數 xxxx 規定的 Unicode 字元。(可以比對漢字)
比對所有
var reg= /[\d\D]/g;
查找單個字元,除了換行和行結束符。
. === [^\r\n]
-
量詞
n+ {1,}
n* {0,}
n? {0,1}
n{X} {x}
n{X,Y} {x,y}
n{X,} {x,}
檢驗一個字元串兩端是否含有數字
var reg = /^\d|\d$/g;
檢驗一個字元串兩端是否都有數字
var reg = /^\d[\s\S]*\d$/g;
- RegExp 對象方法
compile 編譯正規表達式。
exec 檢索字元串中指定的值。傳回找到的值,并确定其位置。
test 檢索字元串中指定的值。傳回 true 或 false。
lastindex :下一個比對的位置
// 比對xxxx
var reg = /(\w)\1\1\1/g // \1反向引用,多次比對前面的表達式
// 比對aabb
var reg = /(\w)\1(\w)\2/g
str.match(reg);
如果表達式中沒有“g”顯示詳細的比對資訊,如上圖所示。如果有“g”隻顯示比對的個數
str.search(reg);
傳回比對的位置,如果沒有比對到就傳回-1
str.replace()
var str = "abcdedfa";
var reg = /a/g
str.replace("a","b"); //隻能傳回一個
str.replace(reg,"b"); //比對所有
// 将aabb變為bbaa
var str = "aabb"
var reg = /(\w)\1(\w)\2/g
console.log(str.replace(reg,'$2$2$1$1'));
console.log(str.replace(reg,function($,$1,$2){
return $2+$2+$1+$1;
}));
toUpperCase(); //變為大寫
toLowerCase(); //變為小寫
//将-word變為小駝峰式
var str = "the-first-name"
var reg = /-(\w)/g
console.log(str.replace(reg,function($,$1){
return $1.toUpperCase();
}))
正向欲查 正向斷言
//正向欲查 正向斷言
var str = "abaaaa";
var reg = /a(?=b)/g //篩選出a之後有b的那個a
var reg = /a(?!b)/g //篩選出a之後沒有b的那個a
//str.match(reg) ["a"]
在“+”……之後加上“?”就變成了非貪婪比對
//去重
var str = "aaaaaaaaaabbbbbccc"
var reg = /(\w)\1*/g
console.log(str.replace(reg,"$1"));
var str = "100000000" //變為100,000,000
var reg = /(?=(\B)(\d{3})+$)/g //(\d{3})+ 三的倍數個
console.log(str.replace(reg,"."));