1. 程式人生 > >JavaScript中search和match函式的區別

JavaScript中search和match函式的區別

記得以前還在學校的時候,第一次接觸 JavaScript 程式設計,算是第一種程式設計入門語言吧,總是分不清 search 和 match 這兩個函式的區別,好不容易弄明白了,到了考試的時候又混淆了,唉!氣。。。

search在一個字串物件(string object)中查詢關鍵詞字串(規範表示式,regular expression),若匹配(即在目標字串中成功找到關鍵詞)則返回關鍵詞在目標字串中第一次出現的位置序列,反之,如果不匹配,就返回-1。以下示例在目標字串“樂豬網是一個程式設計入門網站,一個學習程式設計的樂園!”中查詢字母“程式設計”,返回值為6,因為字母“程式設計”第一次出現時其常規序列排在第七位,而JS從0開始起算,字母“樂”序列為0,字母“豬”為1,字母“程式設計”當然就是6了:

function KeySearch(Re, Str) {
    var Result = (Str.search(Re) != -1 ? Str : "找不到匹配!");
    return Result;
}

window.onload = function() {
    var MyStr = "樂豬網是一個程式設計入門網站,一個學習程式設計的樂園!";
    var Re = "程式設計";
    var ShowStr = MyStr.search(Re);
    alert(ShowStr);
    alert(KeySearch("我是一個小小的程式設計師!", "程式設計"));
}


我們看得出來,search方法只關心有無匹配,一旦找到匹配,就提供返回值,並且立刻中斷查詢的執行。上例中的目標字串(MyStr)有兩個“程式設計”,後兩個search並不關心,因為條件已經滿足,它退出了自身的匹配查詢工作。據此原理,當我們只需要驗證有無匹配的操作時,用search既簡單又高效。


match也是在目標字串物件中尋找與關鍵詞匹配與否的一個方法,它的強大功能在於通過關鍵詞的規則建立可以實現複雜搜尋功能,非常靈活。

不建立規則前提下,match可當作search來使用,語法也一樣,不同的是,它返回的是關鍵詞自身(若匹配)和null(若不匹配)——這沒有關係,如果只是為了檢測匹配。顯然地,這不是它存在於javascript世界中的理由,它定有不同於search的特色,即通過規則建立完成實現通盤匹配。看下面例子:

var Str = "請問程式設計入門網是一個程式設計技能學習的網站嗎?";
var ShowStr = Str.match(/程式設計/gi);
var Result = ShowStr + " 關鍵詞在原句中出現了 " + ShowStr.length + " 次";
alert(Result);


上例中,第二行為建立規則表示式“/程式設計/gi”,雙反斜槓內的“程式設計”為搜尋關鍵詞,其後的引數“gi”表示全部匹配(同等於“g”,若只用“i”,只匹配一次)。這樣的規則用於match方法,將返回有規則的陣列,其形式為“程式設計,程式設計”,還可用length方法得到陣列的長度(例中結果為2)。