天天看點

正則 - 阮一峰一 正則執行個體方法二 字元串方法

學習位址

一 正則執行個體方法

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模闆替換

正則 - 阮一峰一 正則執行個體方法二 字元串方法
  • 正則所比對的内容會被第二個參數的傳回值替換掉。

繼續閱讀