Domanda Come verificare se una stringa contiene una sottostringa in JavaScript?


Di solito mi aspetterei un String.contains() metodo, ma non sembra esserlo.

Qual è un modo ragionevole per verificare questo?


7436
2017-11-24 13:05


origine


risposte:


Ecco un elenco di possibilità attuali:

1. (ES6) includes- vai a rispondere

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

2. ES5 e precedenti indexOf

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

String.prototype.indexOf restituisce la posizione della stringa nell'altra stringa. Se non viene trovato, ritornerà -1.

3. search- vai a rispondere

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

4. lodash include - vai a rispondere

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

5. RegExp - vai a rispondere

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

6. Partita - vai a rispondere

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

Test delle prestazioni  lo stanno mostrando indexOf potrebbe essere la scelta migliore, se si tratta di un punto in cui la velocità conta.


11453
2017-12-30 04:23



Puoi facilmente aggiungere un contains metodo per String con questa affermazione:

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

Nota:  vedere i commenti sotto per un argomento valido per non usare questo. Il mio consiglio: usa il tuo giudizio.

In alternativa:

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

822
2017-11-24 14:17



Il problema con il tuo codice è che JavaScript fa distinzione tra maiuscole e minuscole. Il tuo metodo di chiamata

indexof()

dovrebbe essere effettivamente

indexOf()

Prova a risolverlo e vedi se questo aiuta:

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

427
2018-01-07 10:23



C'è un string.includes in ES6 :

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

Nota che potrebbe essere necessario caricare es6-shim o simili per farlo funzionare su browser più vecchi.

require('es6-shim')

358
2017-11-24 13:06



var index = haystack.indexOf(needle);

340
2018-03-05 09:53



Potresti usare il JavaScript search() metodo.

La sintassi è: string.search(regexp)

Restituisce la posizione della partita, o -1 se non viene trovata alcuna corrispondenza.

Vedi esempi qui: jsref_search

Non hai bisogno di una sintassi di espressioni regolari complicate. Se non hai familiarità con loro un semplice st.search("title") andrà bene. Se vuoi che il tuo test sia insensibile al caso, allora dovresti farlo st.search(/title/i).


237
2017-10-21 05:31



String.prototype.includes() è stato introdotto in ES6.

Determina se una stringa può essere trovata all'interno di un'altra stringa,   restituendo vero o falso, a seconda dei casi.

Sintassi

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

parametri

searchString

Una stringa da cercare all'interno di questa stringa.

position

La posizione in questa stringa in cui iniziare a cercare searchString il valore predefinito è 0.

Esempio

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  

Nota

Questo potrebbe richiedere uno shim ES6 nei browser più vecchi.


167
2018-05-29 07:46



Se stavi cercando un'alternativa per scrivere il brutto controllo -1, preferisci invece una ~ tilde.

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

Joe Zimmerman  - vedrai che usando ~ on -1 lo converte a 0. Il numero 0 è a   valore falso, il che significa che verrà valutato come falso quando convertito in   un booleano. All'inizio, potrebbe non sembrare una grande intuizione, ma   ricorda che funzioni come indexOf restituiranno -1 quando la query non lo è   trovato. Ciò significa che invece di scrivere qualcosa di simile a questo:

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

Ora puoi avere un minor numero di caratteri nel tuo codice per poterlo scrivere   come questo:

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

Di Più dettagli qui


120
2017-09-13 03:45



Questo pezzo di codice dovrebbe funzionare bene:

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

82
2017-12-13 20:05



Un modo comune per scrivere a contains metodo in JavaScript  è:

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

L'operatore di negazione bit a bit ( ~) è usato per girare -1 in 0 (falso) e tutti gli altri valori saranno diversi da zero (veritiero).

Gli operatori di doppia negazione booleana sono usati per convertire il numero in un booleano.


77
2018-03-14 02:10



In ES5

var s = "foo";
alert(s.indexOf("oo") > -1);

In ES6  ci sono tre nuovi metodi: includes(), startsWith(), endsWith().

var msg = "Hello world!";

console.log(msg.startsWith("Hello"));       // true
console.log(msg.endsWith("!"));             // true
console.log(msg.includes("o"));             // true

console.log(msg.startsWith("o", 4));        // true
console.log(msg.endsWith("o", 8));          // true
console.log(msg.includes("o", 8));          // false


76
2017-11-24 13:13