首頁  >  文章  >  web前端  >  javascript的正規比對方法學習_javascript技巧

javascript的正規比對方法學習_javascript技巧

WBOY
WBOY原創
2016-05-16 15:13:451102瀏覽

javascript中正規比對有3個方法,match,exec,test。這些方法都跟字串和RegExp物件有關,但使用場景不一樣,容易混淆。 match是字串的一個方法,接收一個RegExp物件做為參數,其他的是RegExp物件的方法,接收一個字串參數。

var str = 'abcdef12ab34cd56ef';
var patt = new RegExp('ab'); //主意是非全局匹配

var ret_test = patt.test(str);
console.log(ret_test);
var ret_match = str.match(patt);
console.log(ret_match);
var ret_exec = patt.exec(str);
console.log(ret_exec);

1. regExp.test(string)

  此方法最簡單,在string中找到符合regExp的字串則回傳true,沒找到符合的字串則回傳false

2. regExp.exec(string)

  此方法稍微複雜一點。

  當regExp沒有全域標誌時,其傳回值為字串陣列:陣列的第0號元素為剛符合的字串,如果regExp有子表達式,則陣列第1號元素為regExp的第一個子表達式,第2號元素為regExp的第二個字表達式...以此類推。在上例中如果patt = new RegExp('f(\d)(\d)','g');則ret_exec 將為字串陣列:['f12','1', '2']。

  當regExp有全域標誌(g選項)時,傳回值為第一個符合的字串所組成的陣列,陣列的第0號元素為剛符合的字串,如果regExp有子表達式,則數組第1號元素為regExp的第一個子表達式,第2號元素為regExp的第二個字表達式...以此類推。同時主意,regExp物件的一個屬性(lastIndex)被改變了,lastIndex被設定為那個字串最後一個字元所在的位置,其的後面的那個位置(在上例中是lastIndex = 2)。當再次呼叫 regExp.exec(string)時,搜尋範圍將從regExp.lastIndex開始搜尋。此時傳回值仍是單元素的字串數組,lastIndex = 10 。我們常用while循環來遍歷字串中的匹配:

var patt = new RegExp('ab', 'g'),
  str = 'abcdef12ab34cd56ef', ret;
while((ret = patt.exec(str))!=null) {
  console.log(ret);
}
//输出
['ab']
['ab']

  exec方法傳回的不是標準的數組,應該算是一個類別數組,因為它還有2個屬性:input是輸入的字串,index是目前匹配的字串第一個字元在input中的位置。

3. string.match(regExp)

  此方法比exec簡單一些,因為它不用考慮regExp的lastIndex屬性。同樣,也需要分成兩種情況(全局匹配與非全局匹配)

  當regExp沒有全域標誌時,傳回值與呼叫exec一樣,傳回一個數組,數組的第0號元素為剛匹配到的字串,如果regExp有子表達式,則數組第1號元素為regExp的第一個子表達式,第2號元素為regExp的第二個字表達式...以此類推。主意該陣列同時還有2個屬性:input是輸入的字串string,index是目前符合的字串第一個字元在input中的位置。

  當regExp有全域標誌(g選項)時,很簡單,也符合我們的理解:傳回所有符合的字串組成的陣列。這是標準數組,沒有input屬性,也沒有index屬性。傳回值數組中除了符合的字串沒有任何其他資訊。

  從上面的分析看出,如果你只是想判斷字串是否符合某個正規表示式,就用test方法。如果想一次取出所有符合的字串,或是只找到第一個符合的字串就可以,就用match方法。如果你想多次匹配,而且需要知道每個匹配到的字串在原始字串中的位置,或者正規表示式中還有子表達式資訊需要關注,就用exec方法。

以上就是javascript正規配對的多種方法介紹,希望對大家的學習有所幫助。

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn