Vraag Hoe controleer ik of een string een substring in JavaScript bevat?


Meestal zou ik een verwachten String.contains() methode, maar er lijkt er geen te zijn.

Wat is een redelijke manier om dit te controleren?


7436
2017-11-24 13:05


oorsprong


antwoorden:


Hier is een lijst met huidige mogelijkheden:

1. (ES6) includes-ga antwoorden

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

2. ES5 en ouder indexOf

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

String.prototype.indexOf retourneert de positie van de tekenreeks in de andere tekenreeks. Als het niet wordt gevonden, zal het terugkeren -1.

3. search-ga antwoorden

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

4. lodash omvat-ga antwoorden

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

5. RegExp-ga antwoorden

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

6. Match-ga antwoorden

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

Prestatie testen laten dat zien indexOf is misschien de beste keuze, als het op een punt komt dat snelheid van belang is.


11460
2017-12-30 04:23



U kunt eenvoudig een toevoegen contains methode om met deze verklaring te verbinden:

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

Notitie: zie de reacties hieronder voor een geldig argument om dit niet te gebruiken. Mijn advies: gebruik je eigen oordeel.

Alternatief:

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

822
2017-11-24 14:17



Het probleem met uw code is dat JavaScript hoofdlettergevoelig is. Je methode aanroep

indexof()

zou eigenlijk moeten zijn

indexOf()

Probeer het te repareren en kijk of dat helpt:

if (test.indexOf("title") !=-1) {
    alert(elm);
    foundLinks++;
}

427
2018-01-07 10:23



Er is een string.includes in ES6:

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

Merk op dat je misschien moet laden es6-shim of vergelijkbaar om dit te laten werken in oudere browsers.

require('es6-shim')

359
2017-11-24 13:06



var index = haystack.indexOf(needle);

340
2018-03-05 09:53



Je zou het JavaScript kunnen gebruiken search() methode.

Syntaxis is: string.search(regexp)

Het geeft de positie van de wedstrijd terug, of -1 als er geen overeenkomst is gevonden.

Zie voorbeelden daar: jsref_search

U hebt geen ingewikkelde syntaxis voor reguliere expressies nodig. Als u niet bekend bent met hen een eenvoudig st.search("title") zal ik doen. Als u wilt dat uw test niet hoofdlettergevoelig is, moet u doen st.search(/title/i).


237
2017-10-21 05:31



String.prototype.includes() werd geïntroduceerd in ES6.

Bepaalt of een reeks binnen een andere reeks kan worden gevonden,   retourneren waar of niet waar van toepassing.

Syntaxis

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

parameters

searchString

Een string waarnaar binnen deze string moet worden gezocht.

position

De positie in deze tekenreeks waarnaar moet worden gezocht searchString staat standaard op 0.

Voorbeeld

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  

Notitie

Dit kan ES6-schijf nodig hebben in oudere browsers.


167
2018-05-29 07:46



Als je op zoek was naar een alternatief om de lelijke -1-cheque te schrijven, plaats je in plaats daarvan een ~ tilde.

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

Joe Zimmerman - je zult zien dat met ~ on -1 het naar 0 wordt geconverteerd. Het getal 0 is a   valsey-waarde, wat betekent dat het naar false zal evalueren wanneer het wordt geconverteerd naar   een Boolean. Dat lijkt in eerste instantie misschien niet zo'n groot inzicht, maar   onthoud functies zoals indexOf retourneert -1 als de query dat niet is   gevonden. Dit betekent dat in plaats van iets dergelijks te schrijven:

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

U kunt nu minder tekens in uw code opnemen, zodat u deze kunt schrijven   soortgelijk:

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

Meer details hier


120
2017-09-13 03:45



Dit stuk code zou goed moeten werken:

var str="This is testing for javascript search !!!";
if(str.search("for") != -1) {
   //logic
} 

82
2017-12-13 20:05