RegExp
百度雲資料
密碼:
f89c
裏面有詳細的語法跟例子,希望對大家有幫助.
課前補充
- 轉義字符 “\”
- 多行字符串
- 字符串換行符\n
RegExp作用
- 匹配特殊字符或有特殊搭配原則的字符的最佳選擇。
創建方式
- 直接量(推薦)
- new RegExp();
var str = "abc\\def";
// 直接量
var reg = /abc/i;
// i 是忽略大小寫
var Str = "ABCDe";
// 創建的第二種方式
var regg = new RegExp("abc","igm");
// RegExp() 要是這個參數放進去的本身是正則表達式,
// 那麼它是相同的規則,但是不是同一個引用
var reg1 = RegExp(reg);
var reg2 = new RegExp(reg);
// reg1 跟 reg 是同一個,他們指向同一個地址
// reg2 內容跟這個 reg是一樣的, 但是他們不是指向同一個地址
i g m 修飾符
1. i 執行對大小寫不敏感的匹配。
2. g 執行全局匹配查找所有匹配而非在找到第一個匹配後停止
3. 執行多行匹配
方法
1. reg.test(str);
判斷str字符串是不是包含這個reg片段
2. str.match(reg)
把匹配的reg串給返回
方括號(表達式)
1. [abc] 查找方括號之間的任何字符
2. [^abc] 查找任何不在方括號之間的字符
3. [0-9] 0到9數字
4. [a-z] 查找任何從小寫 a 到小寫 z 的字符
5. (red|blue|green) 查找任何指定的選項
也就是不是當個字符,可能是個字符串
元字符(具有特殊意義的字符)
1. \w等於[0-9A-z_]也是代表一位(world)
2. \W等於[^\w] 表示的\w的非
3. \d等於[0-9] \D等於[^\d]
4. \s元字符用於查找空白符(空格符 製表符 回車符 換行符 垂直換行符 換頁符) \S 查找非空白字符 \s === [\t\n\r\v\f ]
5. \b 匹配單詞邊界 \B 匹配非單詞邊界
6. . === [^\r\n]
量詞
1. n+ 匹配任何包含至少一個 n 的字符串 {1,}
2. n* 匹配任何包含零個或多個 n 的字符串 {0,}
3. n? {0,1}
4. n{x} 表示的就是三個
5. n{x,y} 表示的是x到y個
6. n{x,} 表示就是x到無限個
7. n& 匹配任何結尾爲 n 的字符串
8. ^n 匹配任何開頭爲 n 的字符串
9. ?=n 匹配任何其後緊接指定字符串 n 的字符串
10. ?!=n 匹配任何其後沒有緊接指定字符串 n 的字符串
RegExp對象上面的屬性
1. global global 屬性來檢測正則表達式是否具有標誌 g
2. ignoreCase RegExp 對象是否具有標誌 i
3. lastIndex 一個整數,標示開始下一次匹配的字符位置
4. multiline 屬性用於返回正則表達式是否具有標誌 m
5. source 正則表達式的源文本
RegExp 方法
1. exec 檢索字符串中指定的值 返回找到的值 並確定其位置
2. compile 編譯正則表達式
3. test 檢索字符串中指定的值。返回 true 或 false
支持正則表達式的 String 對象的方法
1. search 檢索與正則表達式相匹配的值
2. match 找到一個或多個正則表達式的匹配
3. replace 替換與正則表達式匹配的子串
4. split 把字符串分割爲字符串數組
拓展() 子表達式
var reg4 = /(\w)\1(\w)\2/g;
// () 這個整體叫做是子表達式
// 上面自然而言就是有兩個子表達式
//
// \數字表示的意思就是copy一份前面的值
var str4 = "aabb";
console.log(str4.match(reg4));
console.log(reg4.exec(str4));
非貪婪匹配
- 再量詞後面加個問號
var str = "aaaaaa";
var reg = /a{1,3}?/g;
var ans = str.match(reg);
replace
// 匹配xxyy形式,然後換成yyxx
var reg3 = /(\w)\1(\w)\2/g;
var str3 = "aabbccdd";
// var tmp = str3.match(reg3);
var ans = str3.replace(reg3,"$2$2$1$1"); //bbaa
// var anss = str3.replace(reg3,function(arr,$1,$2){
// // console.log("arr內容:"+arr);
// console.log($2);
// return $2 + $2 + $1 + $1;
// });
// the-first-name
// theFirstName
var reg5 = /-(\w)/g;
var str = "the-first-name";
var ans1 = str.replace(reg5,function ($,$1){
// 這個方法調用的次數取決於匹配了多少次就調用多少次
// $1 表示的就是第一個子表達式的內容
return $1.toUpperCase();
});
實現千位分隔符
var str = '1234567890';
var f = str.replace(/\d{1,3}(?=(\d{3})+$)/g, '$&,');
console.log(f);
解釋:
正則表達式 \d{1,3}(?=(\d{3})+$) 表示前面有1~3個數字,後面的至少由一組3個數字結尾。
?=表示正向引用,可以作爲匹配的條件,但匹配到的內容不獲取,並且作爲下一次查詢的開始。
$& 表示與正則表達式相匹配的內容,具體的使用可以查看字符串replace()方法的
// 正向預查 正向斷言
var str4 = "aba!aa";
var reg44 = /a(?=b)/g;
//表示的是a後面要是b,但是這個b不參加最後結果
console.log(str4.match(reg44));
var f = '1234567890'.replace(/\d{1,3}(?=(\d{3})+$)/g, '$&,');
console.log(f);
// 結果:1,234,567,890