5 Comments:

    1. non mi piace IE sia, ma se si dispone di due funzioni che sono in gran parte identici, e uno è meglio supportato rispetto all'altro, Penso che si dovrebbe scegliere quello meglio supportato? così indexOf() è...
  1. c'è un String.prototype.includes in ES6:

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

    si noti che questo non funziona in Internet Explorer o in altri vecchi browser senza il supporto ES6 o incompleto. per farlo funzionare in vecchi browser, si potrebbe desiderare di utilizzare un transpailer come Babel, una libreria di shim come es6-shim, o questo polyfill da MDN:

    if (!String.prototype.includes) {
      String.prototype.includes = function(search, start) {
        'use strict';
        if (typeof start !== 'number') {
          start = 0;
        }
    
        if (start + search.length > this.length) {
          return false;
        } else {
          return this.indexOf(search, start) !== -1;
        }
      };
    }
    
  2. un'altra alternativa è KMP.

    l'algoritmo KMP cerca una stringa length- m in una stringa length- n nel caso peggiore O (n + m) tempo, rispetto ad un caso peggiore di O (n ⋅ m) per l'algoritmo ingenuo, in modo da utilizzare KMP può essere ragionevole se vi preoccupate per la complessità del tempo peggiore.

    ecco una implementazione JavaScript di Project Nayuki, tratto da https://www.nayuki.io/res/knuth-morris-pratt-string-matching/kmp-string-matcher.js:

    // Searches for the given pattern string in the given text string using the Knuth-Morris-Pratt string matching algorithm.
    // If the pattern is found, this returns the index of the start of the earliest match in 'text'. Otherwise -1 is returned.
    function kmpSearch(pattern, text) {
        if (pattern.length == 0)
            return 0;  // Immediate match
    
        // Compute longest suffix-prefix table
        var lsp = [0];  // Base case
        for (var i = 1; i < pattern.length; i++) {
            var j = lsp[i - 1];  // Start by assuming we're extending the previous LSP
            while (j > 0 && pattern.charAt(i) != pattern.charAt(j))
                j = lsp[j - 1];
            if (pattern.charAt(i) == pattern.charAt(j))
                j++;
            lsp.push(j);
        }
    
        // Walk through text string
        var j = 0;  // Number of chars matched in pattern
        for (var i = 0; i < text.length; i++) {
            while (j > 0 && text.charAt(i) != pattern.charAt(j))
                j = lsp[j - 1];  // Fall back in the pattern
            if (text.charAt(i) == pattern.charAt(j)) {
                j++;  // Next char matched, increment position
                if (j == pattern.length)
                    return i - (j - 1);
            }
        }
        return -1;  // Not found
    }
    

    esempio di utilizzo:

    kmpSearch('ays', 'haystack') != -1 // true
    kmpSearch('asdf', 'haystack') != -1 // false
    

More similar articles:

  • come verificare se una stringa contiene una sottostringa che è presente in un array predefinito in JavaScript?
  • come verificare quale cella di una colonna di stringa pandas datafame contiene una sottostringa di una data stringa di riferimento?
  • il modo più veloce per controllare una stringa contiene un'altra sottostringa in JavaScript?
  • Perl: come si può verificare che stringa sia una sottostringa di un'altra?
  • come faccio a verificare se una stringa Python è una sottostringa di un'altra?
  • come si può verificare se un array contiene una sottostringa?
  • numero minimo di caratteri rimossi da X per ottenere X come sottostringa che non contiene Y
  • JavaScript: modo più veloce per trovare URL completi da un dato dominio (sottostringa) nella stringa
  • come ottenere un modello specifico di sottostringa dalla stringa c #?
  • come trovi una sottostringa di una stringa in python che non utilizza alcuna funzione integrata o affettare
  • come consentire spazi nella stringa durante la ricerca della posizione della sottostringa in C?
  • come verificare la presenza di una sottostringa in JavaScript?
  • come sostituire più istanze di sottostringa all'interno di una stringa
  • come verificare se una stringa è una sottostringa di qualsiasi istanza di un regex?
  • controllare se la stringa contiene sottostringa all'indice
  • verificare se esiste una stringa usando una sottostringa (usando liste collegate)
  • stringa contiene il metodo return false anche quando stringa contiene sottostringa
  • come verificare se una parola è presente in una sottostringa di una stringa utilizzando java regex
  • convalida la sottostringa in stringa con C
  • come evitare la StringIndexOutOfBounwsException se una sottostringa non è nella mia stringa originale?
  • estrazione di una sottostringa tra due caratteri in una stringa C #
  • come rimuovere tutti gli occurenze di una sottostringa all'interno di una stringa tranne la prima base visiva
  • controllare se una stringa è la sottostringa di un'altra stringa
  • come tagliare il resto della stringa dopo la sottostringa in c #?
  • estrarre una sottostringa da una stringa in python basata su Delimiter
  • trova sottostringa all'interno di una stringa che ignora gli spazi bianchi in perl
  • stringa indice sottostringa potrebbe essere la lunghezza della stringa
  • fa testo contiene sottostringa
  • come posso ottenere una sottostringa da un percorso file in C #?
  • c ++ - avere accesso const alla sottostringa di una stringa