js includes方法 - 如何检查字符串是否包含JavaScript中的子字符串?


15 Answers

您可以使用以下语句轻松地将contains方法添加到String:

String.prototype.contains = function(it) { return this.indexOf(it) != -1; };

注意:请参阅以下注释,了解不使用此参数的有效参数。 我的建议:用你自己的判断。

或者:

if (typeof String.prototype.contains === 'undefined') { String.prototype.contains = function(it) { return this.indexOf(it) != -1; }; }
js contains方法

通常我会期望一个String.contains()方法,但似乎没有。

检查这个的合理方法是什么?




ES6中有一个string.includes

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

请注意,您可能需要加载es6-shim或类似内容才能在旧版浏览器上使用它。

require('es6-shim')



您可以使用JavaScript search()方法。

语法是: string.search(regexp)

它返回匹配的位置,如果未找到匹配则返回-1。

参见那里的例子: jsref_search

您不需要复杂的正则表达式语法。 如果您不熟悉它们,可以使用简单的st.search("title") 。 如果您希望测试不区分大小写,那么您应该进行st.search(/title/i)




如果你正在寻找一种替代方法来编写丑陋的-1检查,那么你可以先添加一个〜代替。

if (~haystack.indexOf('needle')) alert('found');

Joe Zimmerman - 你会看到使用~on -1将它转换为0.数字0是一个假值,意味着它在转换为布尔值时会计算为false。 这可能看起来不像是一个很大的洞察力,但是当找不到查询时,记住像indexOf这样的函数将返回-1。 这意味着不要写类似于此的东西:

if (someStr.indexOf("a") >= 0) {
  // Found it
} else  {
  // Not Found
}

您现在可以在代码中使用更少的字符,因此您可以像这样编写它:

if (~someStr.indexOf("a")) {
  // Found it
} else  {
  // Not Found
}

更多细节在这里




在JavaScript中编写contains方法的常用方法是:

if (!String.prototype.contains) {
    String.prototype.contains = function (arg) {
        return !!~this.indexOf(arg);
    };
}

按位求反运算符( ~ )用于将-1变为0 (假),所有其他值将为非零(真值)。

double boolean negation运算符用于将数字转换为布尔值。




您可以使用经过充分测试和记录的库,而不是使用网络上此处和此处找到的代码段。 我建议的两个选项:

第一个选项:使用Lodash :它有一个includes方法:

_.includes('foobar', 'ob');
// → true

Lodash是npm最受欢迎的javascript库依赖项,并且有大量方便的javascript实用程序方法。 因此,对于许多项目,无论如何你都会想要这个;-)

第二个选项:或者使用Underscore.string :它有一个include方法:

_.str.include('foobar', 'ob');
// → true

这里是Underscore.string的描述,它只增加了9kb,但是为您提供了经过充分测试和记录的库具有over copy'n'paste代码片段的所有优点:

Underscore.string是用于使用字符串进行舒适操作的JavaScript库,受Prototype.js,Right.js,Underscore和漂亮的Ruby语言启发的Underscore.js的扩展。

Underscore.string为您提供了几个有用的函数:capitalize,clean,includes,count,escapeHTML,unescapeHTML,insert,splice,startsWith,endsWith,titleize,trim,truncate等。

请注意,Underscore.string受Underscore.js的影响,但可以在没有它的情况下使用。

最后不是最少:使用JavaScript版本ES6内置includes方法:

'foobar'.includes('ob');
// → true

大多数现代浏览器已经支持它,请关注ES6兼容性表







您正在寻找.indexOf String.prototype.indexOf

indexOf将返回匹配的子字符串的索引。 索引将与子字符串的开始位置相关联。 如果没有匹配,则返回-1。 以下是该概念的简单演示

var str = "Hello World"; // For example, lets search this string,
var term = "World"; // for the term "World",
var index = str.indexOf(term); // and get its index.
if (index != -1) { // If the index is not -1 then the term was matched in the string,
  alert(index); // and we can do some work based on that logic. (6 is alerted)
}




这对我有用。 它选择不包含术语“已删除:”的字符串

if (eventString.indexOf("Deleted:") == -1)



有一种更流畅,更好的方法,它使用(BitWise NOT)运算符。

if(~"John".indexOf("J")) {
  alert("Found")
}
else {
  alert("Not Found");
}

按位不将“x”转换为 - (x + 1)所以,如果x从indexOf方法变为-1,那么它将转换为 - (-1 + 1)= -0这是一个假值。




var a  = "Test String";

if(a.search("ring")!=-1){
     //exist 
} else {
     //not found 
}






收集某种有效的解决方案:

var stringVariable = "some text";
var findString = "text";

//using `indexOf()`
var containResult1 = stringVariable.indexOf(findString) != -1;
document.write(containResult1+', ');

//using `lastIndexOf()`
var containResult2 = stringVariable.lastIndexOf(findString) != -1;
document.write(containResult2+', ');

//using `search()`
var containResult3 = stringVariable.search(findString) != -1;
document.write(containResult3+', ');
     
//using `split()`
var containResult4 = stringVariable.split(findString)[0] != stringVariable;
document.write(containResult4+'');




JavaScript的

 var str = "My big string contain apples and oranges";
 var n = str.indexOf("apples"); 
 alert(n); //will alert 22, -1 if not found

jQuery的

  <p>My big string contain apples and oranges</p>
  alert($("p:contains(apples)")[0] != undefined); //will alert true if found



使用内置且最简单的一个,即字符串上的match() 。 要实现您期待的目标,请执行以下操作:

var stringData ="anyString Data";

var subStringToSearch = "any";

// This will give back the substring if matches and if not returns null
var doesContains = stringData.match(subStringToSearch);

if(doesContains !=null) {
    alert("Contains Substring");
}


Related