Как я могу посчитать, сколько раз конкретная строка встречается в другой строке. Например, это то, что я пытаюсь сделать в Javascript:
var temp = "This is a string.";
alert(temp.count("is")); //should output '2'
javascript
regex
string
TruMan1
источник
источник
Ответы:
g
В регулярном выражении (сокращенно глобальный ) говорит , искать всю строку , а не просто найти первое вхождение. Это соответствуетis
дважды:И, если нет совпадений, он возвращает
0
:источник
count = (str.match(/is/g) || []).length
чтобы справиться, если у вас нет спички.RegExp
конструктор и передавая строку, которую вы ищете, но в этом случае вы должны экранировать все метасимволы. В этом случае предпочтительнее подход с использованием чистой строки.Применение
allowOverlapping
Матчи:
Модульный тест
эталонный тест
Сутьисточник
substring.length
почти каждый цикл, вы должны рассмотреть возможность кэширования его внеwhile
occurrences(11,1) //2
и всё равно будет работать. (Это происходит быстрее, вместо проверки типов и вызова toString () )источник
countInstances("isisisisisis", "is") === 0
.Вы можете попробовать это:
источник
theString.split(myvar).length - 1
которые вы не можете с простым регулярным выражениемМое решение:
источник
countOcurrences('Hello...','.')==8
нет 3Вы можете использовать
match
для определения такой функции:источник
return m ? m.length:-1;
.Версия без регулярных выражений:
источник
is
случаиПросто код-игра в гольф Ребекка Чернова «s решение :-)
источник
Это вернет 2.
источник
Вот самая быстрая функция!
Почему это быстрее?
Все операции объединены настолько, насколько это возможно, что позволяет избежать замедления из-за нескольких операций.
Вот более медленная и более читаемая версия:
Этот медленнее из-за счетчика, длинных имен var и неправильного использования 1 var.
Чтобы использовать это, вы просто делаете это:
Изменить: (2013/12/16)
НЕ используйте с Opera 12.16 или старше! это займет почти в 2,5 раза больше, чем решение регулярных выражений!
В Chrome это решение займет от 14 до 20 мс для 1000000 символов.
Решение регулярных выражений занимает 11-14ms для того же количества.
Используя функцию (снаружи
String.prototype
) займет около 10-13 мс.Вот код, используемый:
Результат всех решений должен быть 100 000!
Примечание: если вы хотите, чтобы эта функция насчитывала более 1 символа, измените положение
c=(c+'')[0]
наc=c+''
источник
источник
Я думаю, что цель регулярных выражений сильно отличается от
indexOf
.indexOf
просто найдите вхождение определенной строки, в то время как в регулярном выражении вы можете использовать подстановочные знаки, например,[A-Z]
что означает, что он найдет любую заглавный символ в слове без указания фактического символа.Пример:
источник
Супер пупер старый, но мне нужно было сделать что-то подобное сегодня и только подумал, чтобы проверить потом. Работает довольно быстро для меня.
источник
См .: - подсчитать подстроку в строке для пошагового объяснения.
источник
Опираясь на @ Vittim.us ответ выше. Мне нравится контроль, который дает мне его метод, позволяющий легко расширять его, но мне нужно было добавить нечувствительность к регистру и ограничить совпадения целыми словами с поддержкой пунктуации. (например, «ванна» означает «принять ванну», но не «купание»)
Регулярное выражение для пунктуации получено по адресу : https://stackoverflow.com/a/25575009/497745 ( Как я могу удалить все знаки препинания из строки в JavaScript с помощью регулярного выражения? )
Пожалуйста, не стесняйтесь изменять и реорганизовывать этот ответ, если вы обнаружите ошибки или улучшения.
источник
Для любого, кто найдет этот поток в будущем, обратите внимание, что принятый ответ не всегда вернет правильное значение, если вы его обобщите, так как он задушит операторы регулярных выражений, такие как
$
и.
. Вот лучшая версия, которая может справиться с любой иглой:источник
Используйте get_occurrence (varS, string), чтобы найти вхождение как символов, так и строки в строку.
источник
Попробуй это
источник
Простая версия без регулярных выражений:
источник
Никто никогда не увидит этого, но хорошо бы время от времени возвращать функции рекурсии и стрелок (каламбур славно предназначен)
источник
Попробуй это
Скриптовая ссылка: https://jsfiddle.net/rajaramtt/gn0dtsjc/1/
источник
Это очень старая тема, с которой мне приходилось сталкиваться, но, поскольку многие отдали свои ответы, я хочу помочь кому-нибудь с этим простым кодом.
Я не уверен, что это самое быстрое решение, но я предпочел его для простоты и не использовать регулярные выражения (мне просто не нравится их использовать!)
источник
Эта функция возвращает количество вхождений слова в текст.
Обратите внимание, что мы используем toLowerCase для вычисления количества вхождений независимо от формата (заглавная, прописная ...) слова и текста
источник
Ответ для Леандро Батисты: просто проблема с выражением регулярного выражения.
источник
источник
Немного поздно, но при условии, что у нас есть следующая строка:
Сначала мы разделим то, что вы хотите, чтобы соответствовать, это вернет массив строк.
Затем мы получаем его длину и вычитаем 1, так как split по умолчанию равен массиву размера 1 и, как следствие, увеличивает его размер каждый раз, когда обнаруживает вхождение.
Вы также можете сделать все это в одну строку следующим образом:
Надеюсь, это поможет: D
источник
Это решение основано на
.replace()
методе, который принимает RegEx в качестве первого параметра и функцию в качестве второго параметра, который мы можем использовать в качестве замыкания для увеличения счетчика ...Применение
источник
наткнулся на этот пост.
Этот же алгоритм можно выложить короче:
источник
substr_count
переведено на Javascript с PHPОзнакомьтесь с переводом Locutus в функцию Php substr_count
источник
Попробуй это:
источник