2016-08-25 256 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)