Contare il numero di corrispondenze di una regex in Javascript

Volevo scrivere un’espressione regolare per contare il numero di spazi / tabulazioni / newline in una porzione di testo. Così ho ingenuamente scritto quanto segue: –

numSpaces : function(text) { return text.match(/\s/).length; } 

Per alcuni motivi sconosciuti restituisce sempre 1 . Qual è il problema con la dichiarazione di cui sopra? Da allora ho risolto il problema con quanto segue: –

 numSpaces : function(text) { return (text.split(/\s/).length -1); } 

tl; dr: Contatore di pattern generico

 // THIS IS WHAT YOU NEED const count = (str) => { const re = /YOUR_PATTERN_HERE/g return ((str || '').match(re) || []).length } 

Per quelli che sono arrivati ​​qui alla ricerca di un modo generico per contare il numero di occorrenze di un modello regex in una stringa, e non vogliono che fallisca se ci sono zero occorrenze, questo codice è quello che ti serve. Ecco una dimostrazione:

 /* * Example */ const count = (str) => { const re = /[az]{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 '/[az]{3}/g'`) console.log(`'${str2}' has ${count(str2)} occurrences of pattern '/[az]{3}/g'`) 

Come accennato nella mia risposta precedente , puoi usare RegExp.exec() per RegExp.exec() tutte le partite e contare ogni occorrenza; il vantaggio è limitato alla sola memoria, perché nel complesso è circa il 20% più lento rispetto all’utilizzo di String.match() .

 var re = /\s/g, count = 0; while (re.exec(text) !== null) { ++count; } return count; 

('my string' || []).match(/\s/g).length;

che ne dici di questo

 function isint(str){ if(str.match(/\d/g).length==str.length){ return true; } else { return false } }