Como posso contar o número de vezes que uma determinada string ocorre em outra string. Por exemplo, é isso que estou tentando fazer em Javascript:
var temp = "This is a string.";
alert(temp.count("is")); //should output '2'
javascript
regex
string
TruMan1
fonte
fonte
Respostas:
O
g
na expressão regular (abreviação de global ) diz para pesquisar a seqüência inteira em vez de apenas encontrar a primeira ocorrência. Isso correspondeis
duas vezes:E, se não houver correspondências, ele retornará
0
:fonte
count = (str.match(/is/g) || []).length
para lidar se você não tem uma correspondência.RegExp
construtor e passando a string que procura, mas nesse caso você precisa escapar de todos os metacaracteres. Nesse cenário, uma abordagem de cadeia pura é preferível.Uso
allowOverlapping
Fósforos:
Teste de unidade
Referência
Essênciafonte
substring.length
quase todos os loops, considere colocá-lo em cache fora dowhile
occurrences(11,1) //2
e ainda funcionaria. (É mais rápido fazendo desta forma, em vez de verificação de tipos e chamando toString () )fonte
countInstances("isisisisisis", "is") === 0
.Você pode tentar isso:
fonte
theString.split(myvar).length - 1
o que você não pode com um simples regexMinha solução:
fonte
countOcurrences('Hello...','.')==8
e não 3Você pode usar
match
para definir essa função:fonte
return m ? m.length:-1;
.A versão não regex:
fonte
is
ocorrênciasApenas a solução de Rebecca Chernoff :-)
fonte
Isso retornará 2.
fonte
Aqui está a função mais rápida!
Por que é mais rápido?
Todas as operações são o mais combinadas possível, evitando lentidão devido a várias operações
Aqui está uma versão mais lenta e legível:
Este é mais lento devido ao contador, nomes longos de var e uso indevido de 1 var.
Para usá-lo, basta fazer o seguinte:
Edição: (16/12/2013)
NÃO use com o Opera 12.16 ou superior! levará quase 2,5 vezes mais que a solução regex!
No chrome, essa solução leva entre 14ms e 20ms para 1.000.000 caracteres.
A solução regex leva 11-14ms para a mesma quantidade.
Usando uma função (fora
String.prototype
) leva cerca de 10 a 13ms.Aqui está o código usado:
O resultado de todas as soluções deve ser 100.000!
Nota: se você quiser esta função para contar mais de 1 char, mudança, onde está
c=(c+'')[0]
emc=c+''
fonte
fonte
Eu acho que o objetivo da regex é muito diferente
indexOf
.indexOf
basta encontrar a ocorrência de uma determinada string enquanto em regex você pode usar caracteres curinga, o[A-Z]
que significa que ela encontrará qualquer caractere maiúsculo na palavra sem indicar o caractere real.Exemplo:
fonte
Super duper de idade, mas eu precisava fazer algo assim hoje e só pensei em verificar o SO depois. Funciona muito rápido para mim.
fonte
Consulte: - conte uma substring que aparece na string para obter explicações passo a passo.
fonte
Com base na resposta @ Vittim.us acima. Gosto do controle que o método dele me fornece, facilitando a extensão, mas eu precisava adicionar insensibilidade a maiúsculas e minúsculas e limitar correspondências a palavras inteiras com suporte para pontuação. (por exemplo, "banho" está em "tome banho", mas não em "banho")
A regex de pontuação veio de: https://stackoverflow.com/a/25575009/497745 ( Como posso retirar toda a pontuação de uma sequência em JavaScript usando regex? )
Sinta-se à vontade para modificar e refatorar esta resposta se detectar bugs ou melhorias.
fonte
Para qualquer pessoa que encontre esse encadeamento no futuro, observe que a resposta aceita nem sempre retornará o valor correto se você o generalizar, pois ele engasgará com operadores de expressões regulares como
$
e.
. Aqui está uma versão melhor, que pode lidar com qualquer agulha:fonte
Use get_occurrence (varS, string) para localizar a ocorrência dos caracteres e da string em uma String.
fonte
Tente
fonte
Versão simples sem regex:
fonte
Ninguém nunca verá isso, mas é bom recuperar as funções de recursão e flecha de vez em quando (trocadilho gloriosamente intencional)
fonte
Tente isto
Link do Fiddle: https://jsfiddle.net/rajaramtt/gn0dtsjc/1/
fonte
Agora, este é um tópico muito antigo que eu já encontrei, mas, como muitos deles responderam, aqui está o meu, na esperança de ajudar alguém com esse código simples.
Não tenho certeza se é a solução mais rápida, mas eu o preferi por simplicidade e por não usar regex (eu simplesmente não gosto de usá-los!)
fonte
Esta função retorna o número de ocorrências de uma palavra no texto.
Observe que usamos o toLowerCase para calcular o número de ocorrências, independentemente do formato (maiúsculas, maiúsculas ...) da palavra e do texto
fonte
Resposta para Leandro Batista: apenas um problema com a expressão regex.
fonte
fonte
Um pouco tarde, mas, assumindo que temos a seguinte string:
Primeiro, dividimos o que você deseja corresponder, isso retornará uma série de strings.
Em seguida, obtemos o comprimento e subtraímos 1, pois os padrões divididos para uma matriz de tamanho 1 e, consequentemente, aumentam seu tamanho sempre que encontrar uma ocorrência.
Você também pode fazer tudo isso em uma linha da seguinte maneira:
Espero que ajude: D
fonte
Esta solução é baseada no
.replace()
método que aceita um RegEx como primeiro parâmetro e uma função como segundo parâmetro que podemos usar como um fechamento para incrementar um contador ...Uso
fonte
deparei com este post.
O mesmo algoritmo pode ser apresentado mais curto:
fonte
substr_count
traduzido para Javascript do phpConfira a função substr_count da tradução do php do Locutus
fonte
Tente o seguinte:
fonte