2016-08-25 305 views
1

我在用String匹配子字符串時遇到問題。我的子和字符串是像用字符串匹配子字符串

var str="My name is foo.I have bag(s)" 
var substr="I have bag(s)" 

現在,當我使用str.match(SUBSTR)返回null可能是因爲比賽()函數將輸入作爲一個正則表達式,並在我的情況下,它被混同了「 (')我試着用圓括號前面的'\',但它沒有奏效indexOf()函數正在工作,但我不被允許使用它我也使用了test()和exec()但沒有任何成功

+3

如果你只是想檢查一個字符串包含子,做'!!〜str.indexOf(SUBSTR)',或ES6甚至更好,'str.contains(substr)'。 –

+0

你究竟在做什麼?你能告訴我們你的輸出,你正在尋找 – bipen

+0

@Derek朕會功夫我猜javascript沒有任何包含方法。 – Mayank

回答

2

在現代發動機中,您可以使用String.prototype.includes

str.includes(substr) 

如果你想要的東西,在舊的瀏覽器的工作原理,並避免String.prototype.indexOf,你可以實現includes,通過串手動循環:

String.prototype.includes = function (substr, start) { 
    var i = typeof start === 'number' ? start : 0; 
    // Condition exists early if there are not enough characters 
    // left in substr for j to ever reach substr.length 
    for (var j = 0; i + substr.length < this.length + j + 1; ++i) { 
     j = substr[j] === this[i] ? j + 1 : 0; 
     if (j === substr.length) 
      return true; 
    } 
    return false; 
}; 

如果您在使用正則表達式的測試,你可以使用轉義堅持函數this answer,以正確地保留要在正則表達式中使用的substr;在這種情況下,增加了()前一個反斜槓:

new RegExp(substr.replace(/[-\/\\^$*+?.()|[\]{}]/g, '\\$&')).test(str)