學習位址
一 正則執行個體方法
1. test
- 正則執行個體.test傳回布爾值
var r = /x/g;
var s = '_x_x';
r.lastIndex // 0
r.test(s) // true
r.lastIndex // 2
r.test(s) // true
r.lastIndex // 4
r.test(s) // false
- 死循環,因為while循環的每次比對條件都是一個新的正規表達式,導緻lastIndex屬性總是等于0。
var count = 0;
while (/a/g.test('babaa')) count++;
- fixed
var count = 0;
var test1 = /a/g
while (test1.test('babaa')) count++;
console.log(count) // 3
2. exec
- 正則執行個體.exec傳回數組,比對不到時傳回null
- g全局 + lastIndex : 會從上次結束的位置繼續
var reg = /a/g;
var str = 'abc_abc_abc'
var r1 = reg.exec(str);
r1 // ["a"]
r1.index // 0
reg.lastIndex // 1
var r2 = reg.exec(str);
r2 // ["a"]
r2.index // 4
reg.lastIndex // 5
var r3 = reg.exec(str);
r3 // ["a"]
r3.index // 8
reg.lastIndex // 9
var r4 = reg.exec(str);
r4 // null
reg.lastIndex // 0
- 組比對:如果正則表示式包含圓括号(即含有“組比對”),第一個成員是整個比對成功的結果,後面的成員就是圓括号對應的比對成功的組。
var s = '_x_x';
var r = /_(x)/;
r.exec(s) // ["_x", "x"]
- 第一個成員是第一個比對上的,不會傳回全部
var r = /a(b+)a/;
var arr = r.exec('_abbba_aba_');
arr // ["abbba", "bbb"]
- 傳回所有比對
var reg = /a/g;
// 不加g會死循環
var str = 'abc_abc_abc'
while(true) {
var match = reg.exec(str);
if (!match) break;
console.log('#' + match.index + ':' + match[0]);
}
// #0:a
// #4:a
// #8:a
二 字元串方法
1. match
- 字元串.match():傳回一個數組,如果正規表達式帶有g修飾符,成員是所有比對的子字元串(該方法與正則對象的exec方法行為不同)
- 字元串的search/replace/split都可以和正則配合使用
- 去除所有空格
var str = ' #id div.class ';
str = str.replace(/\s+/g, '')
console.log(str) // #iddiv.class
2. replace
- replace方法的第二個參數還可以是一個函數,将每一個比對内容替換為函數傳回值。
'3 and 5'.replace(/[0-9]+/g, function (match) {
return 2 * match;
})
// "6 and 10"
var a = 'The quick brown fox jumped over the lazy dog.';
var pattern = /quick|brown|lazy/ig;
a.replace(pattern, function replacer(match) {
return match.toUpperCase();
});
// The QUICK BROWN fox jumped over the LAZY dog.
replace模闆替換
- 正則所比對的内容會被第二個參數的傳回值替換掉。