Javascript: сколько раз символ встречается в строке
Есть ли простой способ проверить, сколько раз символ появляется в строке?
4 ответа
Вы можете удалить любой другой символ в строке и проверить длину:
Здесь подсчитано, сколько a находится в str .
В следующем примере a :
Если вы хотите нечувствительность к регистру, вам нужно что-то вроде
Так что он захватывает флаг «A» и «a». «g» на самом деле не нужен, но вам нужен флаг «i»
Используйте RegEx для подсчета числа «a» в строке.
Позвольте мне объяснить, как это работает:
string.match Это метод RegEx. Он ищет указанный RegEx внутри указанной строки (в этом случае строка «строка» ).
(/a/gi) Это фактический RegEx. В нем говорится: «Найдите персонажа a». Это очень просто. Он также содержит два флага: «g» и «i» . «G» говорит, чтобы найти ВСЕ вхождения символа «a». В противном случае он найдет только первый, и он никогда не будет считать прошлое номер один. Второй флаг — «i» . Это заставляет RegEx соответствовать всем случаям этого символа. Если этого флага (i) не было, приведенный выше код будет только считать 4, потому что он пропустит прописную букву «A» в строке. Из-за «i» он будет соответствовать верхнему и нижнему регистру.
Подсчитать количество вхождений символа в строку в JavaScript
В этом посте мы обсудим, как подсчитать общее количество вхождений символа в строку с помощью JavaScript.
1. Использование регулярных выражений
Регулярные выражения часто используются в JavaScript для сопоставления текста с шаблоном. В следующем примере кода показано его использование для получения количества символов в строке. Он использует match() метод экземпляра строки.
The match() метод возвращает null если бы совпадений не было. Чтобы избежать вызова свойства length в null значение, мы использовали логический оператор ИЛИ [] .
2. Использование String.prototype.split() функция
Здесь идея состоит в том, чтобы разбить строку, используя заданный символ в качестве разделителя, и определить количество, используя длину результирующего массива. Это можно легко сделать с помощью split() метод:
Javascript: сколько раз символ встречается в строке
Есть ли простой способ проверить, сколько раз персонаж появляется в строке?
6 ответов
Вы можете удалить любой другой символ в строке и проверить длину:
Здесь подсчитывается, сколько a в str .
На мой взгляд, в этом случае удобнее и безопаснее избегать регулярных выражений.
Это потому, что если мы хотим иметь возможность считать любые символы, нам нужно рассмотреть два выражения. Один для общих символов и второй для специальных символов, например, [ , ] , ^ и так далее. Об этом легко забыть, но даже если мы запомним это, я думаю, что мы излишне расширяем наш код.
В этом случае для строки str и символа ch работает каждое из следующих решений:
Используйте RegEx для подсчета числа «а» в строке.
Позвольте мне объяснить, как это работает:
string.match Это метод RegEx. Он ищет указанный RegEx внутри указанной строки (в данном случае это строка «строка»).
(/a/gi) Это фактический RegEx. Он гласит: «найти персонажа а». Это очень просто. Это также несет два флага, «g» и «i». «Г» говорит, чтобы найти ВСЕ вхождения символа «а». В противном случае он найдет только первый и никогда не будет считаться за номером один. Второй флаг «я». Это заставляет RegEx соответствовать всем случаям этого символа. Если бы этого флага (i) не было, приведенный выше код насчитывал бы только 4, потому что он пропустил бы верхний регистр «A» в строке. Из-за «i» он будет соответствовать верхнему и нижнему регистру. Удалите «я», если вы хотите, чтобы сопоставить регистр букв.
How to count string occurrence in string?
How can I count the number of times a particular string occurs in another string. For example, this is what I am trying to do in Javascript:
40 Answers 40
The g in the regular expression (short for global) says to search the whole string rather than just find the first occurrence. This matches is twice:
And, if there are no matches, it returns 0 :
![]()
Usage
allowOverlapping
Unit Test
Benchmark
-
cached substring length
-
added type-casting to string.
-
added optional ‘allowOverlapping’ parameter
-
fixed correct output for "" empty substring case.
![]()
![]()
![]()
You can try this:
![]()
![]()
You can use match to define such function:
![]()
The non-regex version:
This will return 2.
![]()
Here is the fastest function!
Why is it faster?
- Doesn’t check char by char (with 1 exception)
- Uses a while and increments 1 var (the char count var) vs. a for loop checking the length and incrementing 2 vars (usually var i and a var with the char count)
- Uses WAY less vars
- Doesn’t use regex!
- Uses an (hopefully) highly optimized function
All operations are as combined as they can be, avoiding slowdowns due to multiple operations
Here is a slower and more readable version:
This one is slower because of the counter, long var names and misuse of 1 var.
To use it, you simply do this:
Edit: (2013/12/16)
DON’T use with Opera 12.16 or older! it will take almost 2.5x more than the regex solution!
On chrome, this solution will take between 14ms and 20ms for 1,000,000 characters.
The regex solution takes 11-14ms for the same amount.
Using a function (outside String.prototype ) will take about 10-13ms.
Here is the code used:
The result of all the solutions should be 100,000!
Note: if you want this function to count more than 1 char, change where is c=(c+»)[0] into c=c+»