Подсчитайте количество совпадений регулярного выражения в Javascript
Я хотел написать регулярное выражение, чтобы подсчитать количество пробелов/вкладок / новой строки в куске текста. Поэтому я наивно написал следующее:-
numSpaces : function(text) {
return text.match(/s/).length;
}
по каким-то неизвестным причинам он всегда возвращает 1. В чем проблема с приведенным выше утверждением? С тех пор я решил проблему следующим образом:-
numSpaces : function(text) {
return (text.split(/s/).length -1);
}
4 ответов:
tl; dr: общий счетчик шаблонов
// THIS IS WHAT YOU NEED const count = (str) => { const re = /YOUR_PATTERN_HERE/g return ((str || '').match(re) || []).length }для тех, кто прибыл сюда, ища общий способ подсчета количества вхождений шаблона регулярных выражений в строке и не хочет, чтобы он потерпел неудачу, если есть нулевые вхождения, этот код-то, что вам нужно. Вот пример:
/* * Example */ const count = (str) => { const re = /[a-z]{3}/g return ((str || '').match(re) || []).length } const str1 = 'abc, def, ghi' const str2 = 'ABC, DEF, GHI' console.log(`'${str1}' has ${count(str1)} occurrences of pattern '/[a-z]{3}/g'`) console.log(`'${str2}' has ${count(str2)} occurrences of pattern '/[a-z]{3}/g'`)Оригинальный Ответ
проблема с вашим исходным кодом заключается в том, что вам не хватает глобальные идентификатор:
>>> 'hi there how are you'.match(/\s/g).length; 4без
gчасть регулярного выражения будет соответствовать только первому вхождению и остановится там.также обратите внимание, что ваше регулярное выражение будет считать последовательные пробелы дважды:
>>> 'hi there'.match(/\s/g).length; 2если это нежелательно, вы можете сделать это:
>>> 'hi there'.match(/\s+/g).length; 1
как говорится в мой предыдущий ответ, вы можете использовать
RegExp.exec()для перебора всех совпадений и подсчета каждого вхождения; преимущество ограничено только памятью, потому что в целом это примерно на 20% медленнее, чем использованиеString.match().var re = /\s/g, count = 0; while (re.exec(text) !== null) { ++count; } return count;
Как насчет такой
function isint(str){ if(str.match(/\d/g).length==str.length){ return true; } else { return false } }
Comments