淺談regExp的test方法取得的值變化的原因及處理方法
1、JavaScript 正則表達式對象RegExp的test方法,用于檢測一個字符串是否匹配某個模式。
字面量定義RegExp對象:var re = /pattern/attributes,其中attributes可以是g,i,m;
閱讀以下程序:
<script type="text/javascript">
var str = 'abc123';
var re = /^abc/g ;
var result1 = re.test(str);
var result2 = re.test(str);
var result3 = re.test(str);
document.write('result1:' + result1 + '<br/>');
document.write('result2:' + result2 + '<br/>');
document.write('result3:' + result3);
</script>
我們會認為打印結果應該是true;true;true;
而實際情況卻是true;false;true;
2、為什么第二個結果是false?
發(fā)現RegExp對象有一個lastIndex的屬性,如果使用了全局修飾符,那么執(zhí)行test方法后,lastIndex就會記錄匹配的字符串在原始字 符串中最后一位的索引加一,例如執(zhí)行了var result1 = re.test(str)后lastIndex為3(document.write('re.lastindex:' + re.lastIndex+ '<br/>');),如果沒有發(fā)現匹配lastIndex置為0。當下次再執(zhí)行時,對給定的字符串匹配不是從開頭位置,而是要依據lastIndex提供的位置,由于這個原因,所以導致上例中result2的值為false。
3、處理方法:去除g;
即:var re = /^abc/g ;變?yōu)?var re = /^abc/;
以上這篇淺談regExp的test方法取得的值變化的原因及處理方法就是小編分享給大家的全部內容了,希望能給大家一個參考,也希望大家多多支持腳本之家。
相關文章
JS獲取URL中參數值(QueryString)的4種方法分享
今天碰到要在一個頁面獲取另外一個頁面url傳過來的參數,一開始很本能的想到了用 split("?")這樣一步步的分解出需要的參數。后來想了一下,肯定會有更加簡單的方法的!所以在網上找到了幾個很又簡單實用的方法,mark下。2014-04-04

