1. 程式人生 > >js 正則表示式 test()方法

js 正則表示式 test()方法

test() 方法是正則表示式的一個方法,用於檢測一個字串是否匹配某個模式.
test 方法檢查字串是否與給出的正則表示式模式相匹配,如果是則返回 true,否則就返回 false。

每個正則表示式都有一個 lastIndex 屬性,用於記錄上一次匹配結束的位置.

語法:regexp.test(str) 

在全域性匹配模式下

對於同一個正則物件重複呼叫就會出現下一次的匹配位置從上一次匹配結束的位置開始,解決方法重置lastIndex為0

let reg = /^[\d]{2}$/g;
	let str = "12";
	console.log(reg.test(str));     //返回true
	let = "123";
	console.log(reg.test(str));     //從數字3開始匹配,只有一個數字,故返回false

重置lastIndex為0

 let reg = /^[\d]{2}$/g;
	let str = "12";
	console.log(reg.test(str));     //返回true
	let = "123";
	reg.lastIndex = 0;
	console.log(reg.test(str));     //返回true

在非全域性匹配模式下,則不存在這個問題

let reg = /^[\d]{2}$/;
	let str = "12";
	console.log(reg.test(str));     //返回true
	let = "123";
	console.log(reg.test(str));     //返回true

另外,test()方法和陣列的forEach()方法一起使用可能達不到預期結果,在for迴圈下,同樣如此,如下

    let line = '1a 123 123 12';
	let lines = line.split(' ');
    let reg = /^[\d]+$/g;
    let res = 0;
    lines.forEach( function(element, index) {
    	console.log(reg.test(element));  // flase true 交替出現	
    });

使用forEach方法對陣列中字串進行test測試,會出現flase true 交替出現的現象,先出現false還是true則取決陣列第一個元素匹配的結果。

同樣的,在非全域性匹配模式下,則不存在這個問題,這裡去掉全域性匹配g才可得到預期結果

let line = '1a 123 123 12'
	let lines = line.split(' ');
    let reg = /^[\d]+$/;
    let res = 0;
    lines.forEach( function(element, index) {
    	console.log(reg.test(element));  	// false true true true
    });