通常我希望有一个
什么是检查这个的合理方法?
以下是目前的可能性列表:
1. (ES6)
1 2 3 | var string ="foo", substring ="oo"; string.includes(substring); |
2. ES5和更老的
1 2 3 | var string ="foo", substring ="oo"; string.indexOf(substring) !== -1; |
3.
1 2 3 | var string ="foo", expr = /oo/; string.search(expr); |
4. lodash include -去回答
1 2 3 | var string ="foo", substring ="oo"; _.includes(string, substring); |
5. RegExp-go回答
1 2 3 | var string ="foo", expr = /oo/; // no quotes here expr.test(string); |
6. 比赛来回答
1 2 3 | var string ="foo", expr = /oo/; string.match(expr); |
性能测试显示,如果速度很重要,
你可以很容易地添加一个
1 | String.prototype.contains = function(it) { return this.indexOf(it) != -1; }; |
注意:请参阅下面的注释,以获得不使用此方法的有效参数。我的建议是:用你自己的判断。
另外:
1 | if (typeof String.prototype.contains === 'undefined') { String.prototype.contains = function(it) { return this.indexOf(it) != -1; }; } |
代码的问题是JavaScript对大小写敏感。你的方法调用
1 | indexof() |
实际上应该
1 | indexOf() |
试着修复它,看看是否有帮助:
1 2 3 4 | if (test.indexOf("title") !=-1) { alert(elm); foundLinks++; } |
ES6中有一个
1 2 | "potato".includes("to"); > true |
注意,您可能需要加载
1 | require('es6-shim') |
1 | var index = haystack.indexOf(needle); |
您可以使用JavaScript
语法是:
它返回匹配项的位置,如果没有找到匹配项,则返回-1。
参见示例:jsref_search
您不需要复杂的正则表达式语法。如果您不熟悉它们,一个简单的
Determines whether one string may be found within another string,
returning true or false as appropriate.
语法
1 | var contained = str.includes(searchString [, position]); |
参数
1 | searchString |
要在此字符串中搜索的字符串。
1 | position |
字符串中开始搜索
例子
1 2 3 4 5 | var str ="To be, or not to be, that is the question."; console.log(str.includes("To be")); // true console.log(str.includes("question")); // true console.log(str.includes("To be", 1)); // false |
注意
这可能需要在旧浏览器中使用ES6垫片。
如果您正在寻找另一种方法来编写难看的-1检查,则需要在前面加上~波浪号。
1 | if (~haystack.indexOf('needle')) alert('found'); |
Joe Zimmerman - you'll see that using ~ on -1 converts it to 0. The number 0 is a
falsey value, meaning that it will evaluate to false when converted to
a Boolean. That might not seem like a big insight at first, but
remember functions like indexOf will return -1 when the query is not
found. This means that instead of writing something similar to this:
1
2
3
4
5 if (someStr.indexOf("a") >= 0) {
// Found it
} else {
// Not Found
}You can now have fewer characters in your code so you can write it
like this:
1
2
3
4
5 if (~someStr.indexOf("a")) {
// Found it
} else {
// Not Found
}
更多细节在这里
这段代码应该可以很好地工作:
1 2 3 4 | var str="This is testing for javascript search !!!"; if(str.search("for") != -1) { //logic } |
用JavaScript编写
1 2 3 4 5 | if (!String.prototype.contains) { String.prototype.contains = function (arg) { return !!~this.indexOf(arg); }; } |
位否定运算符(
双布尔否定运算符用于将数字转换为布尔值。
您还可以使用经过良好测试和文档化的库,而不是使用web上随处可见的代码片段。我建议两种选择:
第一个选项:使用Lodash:它有一个
1 2 | _.includes('foobar', 'ob'); // → true |
Lodash是npm最流行的javascript库依赖项,它有许多方便的javascript实用程序方法。因此,对于许多项目,无论如何你都会想要这个;-)
第二个选项:或使用下划线。string:它有一个
1 2 | _.str.include('foobar', 'ob'); // → true |
下面是对下划线的描述。字符串,它只是增加了9kb,但给你所有的优势,一个良好的测试和文件库的复制粘贴代码片段:
Underscore.string is JavaScript library for comfortable manipulation
with strings, extension for Underscore.js inspired by Prototype.js,
Right.js, Underscore and beautiful Ruby language.Underscore.string provides you several useful functions: capitalize,
clean, includes, count, escapeHTML, unescapeHTML, insert, splice,
startsWith, endsWith, titleize, trim, truncate and so on.
注意下划线。string受Underscore.js的影响,但可以在没有它的情况下使用。
最后一点:在JavaScript版本ES6中有一个内置的
1 2 | 'foobar'.includes('ob'); // → true |
大多数现代浏览器已经支持它,关注ES6兼容性表。
您可以使用jQuery的
1 | $("div:contains('John')") |
检查这里:容器选择器
另一个选择是:
您可以使用match函数,即:
1 2 3 4 5 | x ="teststring"; if (x.match("test")) { // Code } |
match()也可以用于正则表达式:
1 2 3 4 5 | x ="teststring"; if (x.match(/test/i)) { // Code } |
使用正则表达式:
您正在寻找
1 2 3 4 5 6 | 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) } |
如前所述,您需要使用大写"O"调用indexOf。还应该注意,在JavaScript类中是一个保留字,您需要使用className来获取这个数据属性。它失败的原因可能是因为它返回了一个空值。您可以执行以下操作来获得您的类值…
1 2 3 | var test = elm.getAttribute("className"); //or var test = elm.className |
这对我很有效。它选择不包含术语"已删除"的字符串:
1 | if (eventString.indexOf("Deleted:") == -1) |
由于这个问题非常流行,我想我可以在代码中添加一点现代风格。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 | // const : creates an immutable constant const allLinks = document.getElementsByTagName("a"); // [].reduce.call : gives access to the reduce method on a HTMLCollection // () => {} : ES6 arrow function const foundLinks = [].reduce.call(allLinks, (sum, link) => { // bitwise OR : converts the boolean value to a number return sum + (link.classList.contains("title") | 0); }, 0); // template literal console.log(`Found ${foundLinks ||"no <hr><h3> <wyn>String.prototype.indexOf()</wyn>或<wyn>String.prototype.search()</wyn> ? ! </h3><p>正如其他人已经提到的,JavaScript字符串同时具有<wyn>indexOf</wyn>和<wyn>search</wyn>方法。</P><p>两者之间的关键区别是,<wyn>indexOf</wyn>只适用于普通子字符串,而<wyn>search</wyn>也支持正则表达式。当然,使用<wyn>indexOf</wyn>的好处是更快。</P><p>在JavaScript中,indexOf()和search()的区别是什么?</P>实现自己的<wyn>String.prototype.contains()</wyn>方法<p>如果你想给每个字符串添加你自己的<wyn>contains</wyn>方法,最好的方法是@zzzzBov的方法:</P>[cc lang="javascript"]if (!String.prototype.contains) { String.prototype.contains = function (arg) { return !!~this.indexOf(arg); }; } |
你可以这样使用它:
1 | 'Hello World'.contains('orl'); |
实现自定义实用程序库
例如,将您自己的自定义方法添加到JavaScript中的标准对象中通常是不被允许的,因为这可能会破坏向前兼容性。
如果你真的想要你自己的
1 2 3 4 5 6 7 8 | var helper = {}; helper.string = { contains : function (haystack, needle) { return !!~haystack.indexOf(needle); }, ... }; |
你可以这样使用它:
1 | helper.string.contains('Hello World', 'orl'); |
使用第三方实用程序库
如果您不想创建自己的自定义助手库,当然总是可以选择使用第三方实用程序库。正如@nachtigall所提到的,最流行的是Lodash和Underscore.js。
在Lodash中,可以使用
1 | _.includes('Hello World', 'orl'); |
在强调。,你可以使用
1 | _.str.include('Hello World', 'orl'); |
有一种更好的方法可以做到这一点,那就是使用(按位不)操作符。
1 2 3 4 5 6 | if(~"John".indexOf("J")) { alert("Found") } else { alert("Not Found"); } |
如果indexOf方法中的x是-1,则位元不能将"x"转换为-(x + 1)。然后它将被转换成-(-1 + 1)= -0,这是一个伪值。
例子
1 2 3 4 5 6 7 | var a ="Test String"; if(a.search("ring")!=-1){ //exist } else { //not found } |
ES6包含
https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/String/includes
简单的解决方法
1 2 3 4 5 | if (!String.prototype.contains) { String.prototype.contains= function() { return String.prototype.indexOf.apply(this, arguments) !== -1; }; } |
您可以使用以下方法
1 2 3 4 5 | "hello".contains("he") // true "hello world".contains("lo w")//true "hello world".contains("lo wa")//false "hello world".contains("")//true "hello world".contains(" ")//false |
MDN参考
收集一些有效的解决方案:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 | 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+''); |
在数组中使用
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 | <html> <head> <hh2>Use of contains() method</hh2> <script> Array.prototype.contains = function (element) { for (var i = 0; i < this.length; i++) { if (this[i] == element) { return true; } } return false; } arr1 = ["Rose","India","Technologies"]; document.write("The condition is"+arr1.contains("India")+""); </script> </head> [If the specified element is present in the array, it returns true otherwise returns false.] </html> |
在给定的代码中,
因为使用原型有一个抱怨,因为使用
1 2 3 | function stringContains(inputString, stringToFind) { return (inputString.indexOf(stringToFind) != -1); } |
这就是我最终寻求的妥协。
JavaScript
1 2 3 | var str ="My big string contain apples and oranges"; var n = str.indexOf("apples"); alert(n); //will alert 22, -1 if not found |
jQuery
1 2 3 4 | <p> My big string contain apples and oranges </p> alert($("p:contains(apples)")[0] != undefined); //will alert true if found |
在ES6中,我们有一些调用include,它做的正是您想要的:所以你可以这样做:
1 | 'str1'.includes('str2'); |
同样在ES5中,如果你广泛使用它,你可以这样简单地添加:
1 2 3 | String.prototype.includes = String.prototype.includes || function(str) { return this.indexOf(str) > -1; } |
最简单的方法就是使用indexOf。要检查字符串
1 2 3 | string ="asdf"; substr ="as"; alert(string.indexOf(substr) == -1 ? false : true); |
因为你想要函数
1 2 3 | String.prototype.contains = function(test) { return this.indexOf(test) == -1 ? false : true; }; |
现在您可以使用这个ecen较短的方法来检查一个字符串是否包含一个特殊的子字符串:
1 2 | string ="asdf"; alert(string.contains("as")); |
这还有一把小提琴。
简单的答案,100%有效
1 2 3 4 5 | if (!String.prototype.contains) { String.prototype.contains= function() { return String.prototype.indexOf.apply(this, arguments) !== -1; }; } |
一些例子
1 2 3 4 5 | "hello".contains("he") // true "hello world".contains("lo w")//true "hello world".contains("lo wa")//false "hello world".contains("")//true "hello world".contains(" ")//false |
使用内置的和最简单的i。e
1 2 3 4 5 6 7 8 9 10 | 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"); } |
如果您不喜欢
1 2 3 4 | if ("StackOverflow".indexOf("Stack") + 1 ) alert('contains'); else alert('does not contain'); |
1 2 3 4 | var str ="Stack Overflow"; var n = str.search("Overflow"); if (n != -1) alert('String exists') |
有多种方法可以做到这一点。最常用的是
1 2 3 | let str ="A cat and a dog"; str.indexOf("cat"); // returns 2 str.indexOf("panda"); // returns -1 |
Try this:
1 2 3 4 | if ('Hello, World!'.indexOf('orl') !== -1) alert("The string 'Hello World' contains the substring 'orl'!"); else alert("The string 'Hello World' does not contain the substring 'orl'!"); |
举个例子:jsfiddle
使用ECMAScript 2015,我们可以使用
1 2 | let s ="foo"; console.log(s.includes("oo")); |
非常简单:
1 2 3 4 | var a ="foo", b="oo"; if (a.indexOf(substring) !== -1) { // has } |
可以使用
1 2 3 4 5 6 | var string ="This is a test string", substring ="test"; if(string.indexOf(substring) >= 0) //substring exist else //substring does not exist |
我知道最好的方法是
我建议另一种方法(
1 2 3 | var str ="Hello World!", s1 ="ello", s2 ="elloo"; alert(str.replace(s1,"") !== str); alert(str.replace(s2,"") !== str); |
这是一个函数,检查一个字符串中是否存在子字符串:
1 2 3 | function isStringMatch(str, str_to_match) { return (str.indexOf(str_to_match) > -1); } |
你也可以这样做
1 2 3 4 5 6 7 8 9 10 11 12 13 | var snipers =" Vasily Zaytsev, Simo Hayha, Chris Kyle"; var me ="Josip"; function printSniperStatus (person) { if (aContainsB(snipers, person)) { console.log(person +" is a sniper."); } else { console.log(person +" is NOT a sniper."); } } // Outputs:"Josip is NOT a sniper." printSniperStatus(me); |
另一个答案…
Usually, I would expect a String.contains() method,...
根据通常的意思,至少有一种方法在之前的所有答案中都没有出现。
这可能在非常特殊的情况下有用,但是:
1 2 3 4 | var mystring="Foo bar baz" var searchstr="bar" var arraysplt=mystring.split(searchstr) var containbool=typeof(arraysplt[1])=="string"; |
如果
或
1 | typeof( mystring.split( searchstr )[1] ) =="string"; |
但是,只有当
…所以我认为这个简短的方法完全没用。
但是,如果您的目标是分割一个字符串,那么使用
我很惊讶这里没有人提到KMP。公里是什么?KMP算法提供了最坏情况下的线性时间子串搜索,所以如果你关心最坏情况下的时间复杂度,这是一种合理的方法。链接到JavaScript KMP实现示例
1 2 3 | var string ="foo", substring ="oo"; console.log(string.indexOf(substring) !== -1); |
使用索引可以很容易地识别,例子:
1 2 3 4 5 6 | var array = [2, 9, 9]; array.indexOf(2); // 0 array.indexOf(7); // -1 array.indexOf(9, 2); // 2 array.indexOf(2, -1); // -1 array.indexOf(2, -3); // 0 |
结果在注释行之后
indexOf方法是最好的解决方案,因为它受到所有浏览器的支持
语法是:
其中
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 | result = 'GBP|1800'; //if pipe delimeter is there it returns true else false. if(result.indexOf("|")) { console.log('go default:' +result); var cur = result.substring(0, 3);//returns GBP console.log('go default cur:' +cur); var minmum_fee = result.substring(4);//gets the substring amount console.log('go default minmum_fee:' +minmum_fee); } else { console.log('not found:' +result); } |