學習地址
一 正則實例方法
1. test
- 正則實例.test返回布爾值
var r = /x/g;
var s = '_x_x';r.lastIndex // 0
r.test(s) // truer.lastIndex // 2
r.test(s) // truer.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 // 1var r2 = reg.exec(str);
r2 // ["a"]
r2.index // 4
reg.lastIndex // 5var r3 = reg.exec(str);
r3 // ["a"]
r3.index // 8
reg.lastIndex // 9var 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模板替換
- 正則所匹配的內容會被第二個參數的返回值替換掉。