Paano upang suriin kung ang isang string ay naglalaman ng isang substring sa javascript?

Karaniwan, inaasahan ko ang String.contains() , ngunit tila nawawala.

Ano ang makatwirang paraan upang i-verify ito?

7436
24 нояб. itakda ang gramm 24 nov. 2009-11-24 16:04 '09 sa 16:04 2009-11-24 16:04
@ 49 tugon
  • 1
  • 2

Narito ang isang listahan ng kasalukuyang mga tampok:

Kasama sa 1. (ES6) - pumunta sa sagot

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

2. ES5 at mas lumang indexOf

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

String.prototype.indexOf nagbabalik ang posisyon ng isang string sa isa pang string. Kung hindi natagpuan, babalik ito -1 .

3. search - pumunta sa sagot

 var string = "foo", expr = /oo/; string.search(expr); 

4. Kasama sa lodash - pumunta sa sagot

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

5. RegExp - pumunta sa sagot

 var string = "foo", expr = /oo/; // no quotes here expr.test(string); 

6. Tugma - pumunta sa sagot

 var string = "foo", expr = /oo/; string.match(expr); 

Ang mga pagsusulit sa pagganap ay nagpapakita na ang indexOf ay maaaring ang pinakamahusay na pagpipilian kung ito ay dumating sa ang katunayan na ang mga bagay na bilis.

11502
24 нояб. Ang sagot ay ibinigay ni Fabien Ménager 24 nov. 2009-11-24 16:05 '09 sa 16:05 2009-11-24 16:05

Madali mong maidaragdag ang paraan ng contains sa String gamit ang pahayag na ito:

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

Tandaan: tingnan ang mga komento sa ibaba para sa isang wastong argument para sa hindi paggamit nito. Aking payo: gamitin ang iyong sariling opinyon.

border=0

Bi>

 if (typeof String.prototype.contains === 'undefined') { String.prototype.contains = function(it) { return this.indexOf(it) != -1; }; } 
823
30 дек. Ang sagot ng Avi Flax ay Disyembre 30. 2009-12-30 07:23 '10 sa 7:23 ng 2009-12-30 07:23

Ang problema sa iyong code ay ang javascript ay case sensitive. Paraan ng tawag

 indexof() 

dapat

 indexof() 

Subukan upang ayusin ito at tingnan kung nakatutulong ito:

 if (test.indexOf("title") !=-1) { alert(elm); foundLinks++; } 
429
24 нояб. Ang sagot ay ibinigay Victor Nobyembre 24. 2009-11-24 17:17 '09 sa 17:17 2009-11-24 17:17

May string.includes sa ES6 :

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

Mangyaring tandaan na maaaring kai>es6-shim o katulad upang es6-shim ito sa mas lumang mga browser.

 require('es6-shim') 
361
07 янв. ang sagot ay binibigyan ng eliocs 07 jan. 2013-01-07 13:23 '13 sa 13:23 2013-01-07 13:23
 var index = haystack.indexOf(needle); 
341
24 нояб. ang sagot ay binibigyan ng pixeline 24 nov. 2009-11-24 16:06 '09 sa 16:06 2009-11-24 16:06

Maaari mong gamitin ang search() JavaScript na paraan.

Syntax: string.search(regexp)

Ibinabalik ang posisyon ng isang tugma, o -1 kung ang isang tugma ay hindi natagpuan.

Tingnan ang mga halimbawa: jsref_search

Hindi mo kai>st.search("title") . Kung nais mo ang iyong pagsusulit na maging wa>st.search(/title/i) .

237
05 марта '10 в 12:53 2010-03-05 12:53 Sagot ay ibinigay ni Tardis noong Marso 05 '10 sa 12:53 2010-03-05 12:53

String.prototype.includes() ipinakilala sa ES6.

Tinutukoy kung isang string ay matatagpuan sa isa pang string, bumabalik totoo o hindi totoo, ayon sa pagkakabanggit.

Syntax

 var contained = str.includes(searchString [, position]); 

Parameter

 searchString 

Ang string upang tumingin sa loob ng string na ito.

 position 

Ang posisyon sa string na ito kung saan nais mong simulan ang searchString ng paghahanap sa paghahanap sa pamamagitan ng default na 0.

Halimbawa

167
21 окт. sagot na ibinigay ni Aniket Kulkarni Oct 21. 2013-10-21 08:31 '13 sa 8:31 ng 2013-10-21 08:31

Kung naghahanap ka ng alternatibo upang isulat ang check-ugly -1, sa halip ay idagdag mo ang isang tilde.

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

Joe Zimmerman - makikita mo na ang paggamit ng ~ sa -1-convert ito sa 0. Ang bi>

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

Ngayon ay maaari kang magkaroon ng mas kaunting mga character sa code upang maaari mong isulat ang halimbawa:

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

Higit pang mga detalye dito

120
12 мая '14 в 1:22 2014-05-12 01:22 Ang sagot ay ibinigay ng Christian Landgren noong Mayo 12, '14 sa 1:22 2014-05-12 01:22

Ang bahaging ito ng code ay dapat na gumana nang maayos:

 var str="This is testing for javascript search !!!"; if(str.search("for") != -1) { //logic } 
82
29 мая '12 в 10:46 2012-05-29 10:46 ang sagot ay ibinigay ng vaibhav noong Mayo 29 '12 sa 10:46 2012-05-29 10:46

Ang pangkalahatang paraan upang isulat ang contains paraan sa javascript ay :

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

Ang bitwise negation operator ( ~ ) ay ginagamit upang maging -1 0 (falsey), at lahat ng iba pang mga halaga ay magiging di-zero (true).

Ang mga operator na may double Boolean negation ay ginagamit upang isalin ang mga numero sa lohikal na mga.

77
13 сент. ang sagot ay ibinigay zzzzBov 13 sep . 2012-09-13 06:45 '12 sa 6:45 ng umaga 2012-09-13 06:45

Sa ES5

76
08 авг. ang sagot ay binigyan ng Nisar 08 aug. 2015-08-08 14:44 '15 sa 2:44 ng hapon 2015-08-08 14:44

Sa halip na gamitin ang mga snippet ng code na matatagpuan dito at doon sa Internet, maaari mo ring gamitin ang isang mahusay na nasubok at dokumentado na library. Dalawang opsiyon na aking pinapayo:


Pagpipilian 1: Gamitin ang Lodash : includes :

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

Ang Lodash ay ang pinaka-popular na javascript library dependency para sa npm at may maraming mga kapaki-pakinabang na mga pamamaraan ng javascript utility. Kaya para sa maraming mga proyekto, gusto mo pa rin ito; -)


Ang ikalawang opsyon: O gamitin ang Underscore.string : mayroon itong paraan na include :

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

Narito ang paglalarawan ng Underscore.string, nagdadagdag lamang ito ng 9kb, ngunit binibigyan ka ng lahat ng mga pakinabang na ang isang mahusay na nasubok at dokumentadong library ay may mga fragment code ng copy'n'paste code:

Underscore.string ay isang library ng JavaScript para sa madaling pagmamanipula ng mga string, isang extension para sa Underscore.js, inspirasyon ng Prototype.js, Right.js, Underlining, at isang magandang wika Ruby.

Nagbibigay sa iyo ng Underscore.string ang i>

Tandaan na ang Underscore.string ay apektado ng Underscore.js , ngunit maaaring magamit nang wala ito.


Huling ngunit hindi bababa sa: Ang built-in na paraan kasama ang ES6 JavaScript na bersyon:

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

Sinusuportahan ito ng karamihan sa mga modernong browser, magbayad ng pansin sa talahanayan ng compatibility ng ES6 .

64
13 дек. Ang sagot ay ibinigay nachtigall Disyembre 13. 2013-12-13 23:05 '13 sa 11:05 2013-12-13 23:05

Maaari mong gamitin ang jQuery :contains selector.

 $("div:contains('John')") 

Tandaan dito: naglalaman-tagapili

63
14 марта '11 в 5:10 2011-03-14 05:10 ang sagot ay ibinigay Chorinator Marso 14, '11 sa 5:10 am 2011-03-14 05:10

Gumamit ng regular na expression:

RegExp.test(string)

61
24 нояб. ang sagot ay ibinigay rahul 24 Nobyembre. 2009-11-24 16:13 '09 sa 16:13 2009-11-24 16:13

Nagtrabaho >

 if (eventString.indexOf("Deleted:") == -1) 
49
21 окт. sagot na ibinigay writtinfool Oktubre 21. 2011-10-21 00:50 '11 sa 0:50 2011-10-21 00:50

Ang isa pang paraan upang gawin ito ay:

Maaari mong gamitin ang function na tugma, iyon ay, isang bagay tulad ng:

 x = "teststring"; if (x.match("test")) { // Code } 

Ang tugma () ay maaari ring gumana sa isang regular na expression:

 x = "teststring"; if (x.match(/test/i)) { // Code } 
49
29 сент. Sumagot na ibinigay ni David Craig Setyembre 29 2012-09-29 13:40 '12 sa 13:40 2012-09-29 13:40

Hinanap mo ang .indexOf MDN .

indexOf ay babalik ang subscript subscript. Ang index ay magkakaugnay sa kung saan nagsisimula ang substring. Kung wa>simpleng pagpapakita ng konsepto na ito:

29 авг. Sumagot na ibinigay ni Travis J Agosto 29. 2013-08-29 02:23 '13 sa 2:23 2013-08-29 02:23

Kai>

 var test = elm.getAttribute("className"); //or var test = elm.className 
48
24 нояб. Ang sagot ay ibinigay ng MillsJROSS Nov 24 2009-11-24 18:52 '09 sa 18:52 2009-11-24 18:52

Dahil ang tanong ay lubos na popular, naisip ko na maaari kong magdagdag ng isang bit ng modernong lasa sa code.

 // 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"} title class'); 

BTW, ang tamang sagot ay mali ang indexOf o hindi karaniwang String.contains . Naglo-load ng isang panlabas na library (lalo na kung ang code ay nakasulat sa dalisay na javascript) o pag-messing sa String.prototype o paggamit ng isang regular na expression ay nawala masyadong malayo.

34
27 окт. Sumagot ni Jay Harris Oktubre 27 2013-10-27 18:53 '13 sa 18:53 2013-10-27 18:53

May isang malambot at mas mahusay na paraan upang gawin ito, at ginagamit nito ang operator (BitWise HINDI).

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

Ang bitwise ay hindi nag-convert ng "x" sa - (x + 1), kaya kung ang x ay nakuha -1 mula sa indexOf na paraan, pagkatapos ay i-convert ito sa - (-1 + 1) = -0, na isang maling halaga.

27
07 дек. Ang sagot ay ibinigay Kiba 07 dec. 2014-12-07 14:05 '14 sa 14:05 2014-12-07 14:05

String.prototype.indexOf() o String.prototype.search() ?!

Tulad ng nabanggit na, ang mga string ng JavaScript ay may parehong indexOf at search .

Ang pangunahing pagkakaiba sa pagitan ng dalawa ay ang indexOf ginagamit lamang para sa mga simpleng substrings, habang sinusuportahan din ng search regular na expression. Siyempre, ang bentahe ng paggamit ng indexOf ay mas mabilis ito.

Tingnan din sa JavaScript, ano ang pagkakaiba sa pagitan ng indexOf () at paghahanap ()? .

Pagpapatupad ng iyong sariling paraan String.prototype.contains()

Kung gusto mong idagdag ang iyong sariling contains paraan sa bawat linya, ang pinakamahusay na paraan upang gawin ito ay magiging @zzzzBov :

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

Gagamitin mo ito bi>

 'Hello World'.contains('orl'); 

Pagpapatupad ng isang pasadyang utility

Karaniwang hindi inirerekomenda na idagdag ang iyong sariling mga pamamaraan sa karaniwang mga bagay sa JavaScript, halimbawa, dahil ito ay maaaring masira ang pagiging tugma.

Kung talagang kai>contains paraan at / o iba pang mga pasadyang pamamaraan ng string, mas mahusay na lumikha ng iyong sariling utility library at idagdag ang iyong sariling mga pamamaraan ng string sa library na ito:

 var helper = {}; helper.string = { contains : function (haystack, needle) { return !!~haystack.indexOf(needle); }, ... }; 

Gagamitin mo ito bi>

 helper.string.contains('Hello World', 'orl'); 

Gamit ang isang library ng third-party na utility

Kung hindi mo nais na lumikha ng iyong sariling pagsuporta sa library, mayroong, siyempre, laging ang pagkakataong gumamit ng isang third-party utility library. Tulad ng nabanggit ang @nachtigall , ang pinakasikat ay ang Lodash at Underscore.js .

Sa Lodash, maaari mong gamitin ang _.includes() , na ginagamit mo bi>

 _.includes('Hello World', 'orl'); 

Sa Underscore.js, maaari mong gamitin ang _.str.include() , na ginagamit mo bi>

 _.str.include('Hello World', 'orl'); 
24
21 февр. Sumagot na ibinigay ni John Slegers Pebrero 21. 2016-02-21 19:52 '16 sa 19:52 2016-02-21 19:52

Ang pinakasimpleng workaround

 if (!String.prototype.contains) { String.prototype.contains= function() { return String.prototype.indexOf.apply(this, arguments) !== -1; }; } 

Maaari mong gamitin ang mga sumusunod

 "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 Link

23
21 авг. Sumagot na ibinigay ni Sriramajeyam Sugumaran 21 Ago. 2015-08-21 12:45 '15 sa 12:45 pm 2015-08-21 12:45
22
08 нояб. ang sagot ay ibinigay ng user663031 Nobyembre 8. 2014-11-08 08:38 '14 sa 8:38 ng umaga 2014-11-08 08:38

Halimbawa

 var a = "Test String"; if(a.search("ring")!=-1){ //exist } else { //not found } 
22
12 нояб. Sumagot na ibinigay ni Ali Abbas noong Nobyembre 12 2015-11-12 16:11 '15 sa 16:11 2015-11-12 16:11

JavaScript code upang gamitin ang contains paraan sa isang array:

 <html> <head> <h2>Use of contains() method</h2> <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")+"<br>"); </script> </head> <b>[If the specified element is present in the array, it returns true otherwise returns false.]</b> </html> 

Sa ganitong code, ang contains paraan ay tumutukoy kung ang tinukoy na elemento ay nasa array o hindi. Kung ang tinukoy na elemento ay nasa array, ito ay totoo, kung hindi man ay magbabalik ito ng mali.

21
28 февр. Ang sagot ay ibinigay ni Tarun Gupta Pebrero 28. 2013-02-28 10:50 '13 sa 10:50 2013-02-28 10:50

Upang mangolekta ng i>

19
16 июня '15 в 15:08 2015-06-16 15:08 ang sagot ay ibinigay shA.t Hunyo 16 '15 sa 15:08 2015-06-16 15:08

Dahil mayroong isang reklamo tungkol sa paggamit ng prototype, at dahil ang paggamit ng indexOf ginagawang mas mababa ang iyong code at dahil ang regexp ay puno:

 function stringContains(inputString, stringToFind) { return (inputString.indexOf(stringToFind) != -1); } 

Ito ay isang kompromiso na nakuha ko.

17
22 авг. ang sagot ay ibinigay Tjaart 22 aug. 2013-08-22 14:40 '13 sa 14:40 2013-08-22 14:40

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 
17
16 дек. Ang sagot ay ibinigay ni Alain Gauthier noong Disyembre 16. 2014-12-16 19:48 '14 sa 19:48 2014-12-16 19:48

Gamitin ang built-in at pinakasimpleng string, ie match() sa string. Upang makamit ang iyong inaasahan, gawin ang mga sumusunod:

 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"); } 
13
02 мая '14 в 23:08 2014-05-02 23:08 ang sagot ay ibinigay ng Ankur Madaan 02 May '14 sa 23:08 2014-05-02 23:08

Ang pinakamadaling paraan ay ang paggamit ng indexOf . Upang suriin lamang ang string para sa substring substr , maaari mong gamitin ang pamamaraang ito:

 string = "asdf"; substr = "as"; alert(string.indexOf(substr) == -1 ? false : true); 

Tulad ng kai>string.contains() function, maaari mong ipatupad ang iyong sarili bi>

 String.prototype.contains = function(test) { return this.indexOf(test) == -1 ? false : true; }; 

Ngayon ay maaari mong gamitin ang ecen na mas maikling paraan upang suriin kung ang isang string ay naglalaman ng isang espesyal na substring:

 string = "asdf"; alert(string.contains("as")); 

Narito ang JSFiddle .

13
27 мая '14 в 15:52 2014-05-27 15:52 ang sagot ay ibinigay ng frieder noong Mayo 27 '14 sa 15:52 2014-05-27 15:52
  • 1
  • 2