判斷一個字串是否包含一個子串的方法

zuo發表於2014-10-26

在我們前端日常開發中,經常會遇到判斷一個字串中是否包含某個子串,在此篇文章,我們將去探究一些解決此種需求的方法以及正確的使用它們。理想情況下,我們要找的是一個能匹配我們的目的(if x contains y)的方法,並返回true或false。

一、String.prototype.indexOf和String.prototype.lastIndexOf

i這兩個方法,可能是我們最容易想到的,如果包含子串,則返回大於等於0的索引,否則返回-1,沒有達到我們的理想情況。

var str    = "My blog name is Benjamin-專注前端開發和使用者體驗",
    substr = "Benjamin";

function isContains(str, substr) {
    return str.indexOf(substr) >= 0;
}

//true
console.log(isContains(str, substr));

二、String.prototype.search

我們想到了String.prototype.search方法,因search方法的引數是一個正規表示式,所以和indexOf的情況相同。

var str    = "My blog name is Benjamin-專注前端開發和使用者體驗",
    substr = "Benjamin";

function isContains(str, substr) {
    return new RegExp(substr).test(str);
}

//true
console.log(isContains(str, substr));

這個方法比indexOf方法看起來好點,該方法直接返回true or false,同時方法名稱test比indexOf更有語義性。

三、String.prototype.contains

var str    = "My blog name is Benjamin-專注前端開發和使用者體驗",
    substr = "Benjamin";

function isContains(str, substr) {
    return str.contains(substr);
}

//true
console.log(isContains(str, substr));

此方法目前只有Firefox支援,還處於ECMAScript 6草案中。這個方法滿足了上面提到的理想情況。詳情請戳這裡。如果你想使用contains方法,可以參考第三方庫string.js,GitHub:string.js。原始碼實現:

    contains: function(ss) {
      return this.s.indexOf(ss) >= 0;
    },

其它方法待補充。。。


當然在效能問題上,使用哪種方法更快,還有待測試。 以上就是本文的內容,感謝您的閱讀,文中不妥之處還望批評指正。

相關文章