将子字符串与字符串匹配

时间:2016-08-25 17:38:47

标签: javascript

我遇到了将子字符串与String匹配的问题。我的子串和字符串类似于

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

现在当我使用 str.match(substr)时,它返回null可能是因为match()函数将输入作为正则表达式而在我的情况下它与'''混淆了。我尝试使用'\'在圆括号之前但它没有用。 indexOf()函数正在运行但我不允许使用它。我也使用了test()和exec()但没有任何成功< / p>

1 个答案:

答案 0 :(得分:3)

在现代引擎中,您只需使用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 )