如何在JavaScript中检查字符串是否包含子字符串?

javascript string substring string-matching 凉宫春喵喵 | 2020-02-02 19:35:06




这个问题的答案是一个社区的努力。编辑现有的答案来改进这篇文章。它目前不接受新的答案或交互。


通常我希望有一个
String.contains()
方法,但似乎没有。
什么是检查这个的合理方法?





4 答案



ECMAScript 6引入的
String.prototype.includes


var string = "foo",
substring = "oo";
console.log(string.includes(substring));

includes
不支持Internet Explorer。在ECMAScript 5或更早的环境中,使用
String.prototype.indexOf
,当找不到子字符串时返回-1:

var string = "foo",
substring = "oo";
console.log(string.indexOf(substring) !== -1);


2020-02-02 19:35:18
八云紫17岁


ES6中有一个
String.prototype.includes

"potato".includes("to");
> true

请注意,这在Internet Explorer或其他一些没有或不完全支持ES6的旧浏览器中不起作用。要使其在旧浏览器中工作,您可能希望使用像Babel这样的transpiler、像es6 shim这样的shim库,或者使用来自MDN的polyfill:
if (!String.prototype.includes) {
String.prototype.includes = function(search, start) {
'use strict';
if (typeof start !== 'number') {
start = 0;
}
if (start + search.length > this.length) {
return false;
} else {
return this.indexOf(search, start) !== -1;
}
};
}

2020-02-02 19:35:18
果夏娜


另一种选择是KMP(Knuth-Morris-Pratt)。
KMP算法在最坏情况下O(n+m)时间搜索长度n字符串中的长度m子字符串,而naive算法在最坏情况下O(n⋅m),这是一个使用Nayuki的JavaScript实现,这是一个JavaScript实现,从http://www. nayuik.i/r/kuuth-Morris PrATT字符串匹配/KMP字符串匹配器。JS:
< PRE> >代码> < /PRE> > BR> < PRE> [1 ] < /代码> < /PRE> > BR> BR>

2020-02-02 19:35:18
牙念玉


test.indexof("title") !=-1

这段代码是不可读的(见鬼去做什么)!=-1'表示?)。使用String.search。它可能完全符合你的目的,也有利于可读性。
test.search(/title/)

将返回true/false。
正则表达式使用许多资源。但大多数时候,可读性更为重要。

2020-02-02 19:35:18
早苗我信你


World is powered by solitude
备案号:湘ICP备19012068号