@technobuddha/library
Version:
A large library of useful functions
28 lines (23 loc) • 757 B
text/typescript
import { empty } from '../constants';
import toASCII from '../toASCII';
import splitWords from '../splitWords';
/**
* Approximate the number of syllables in a string
*
* @param input The string
* @returns the number of syllables
*/
export function syllables(input: string): number {
return splitWords(toASCII(input.toLowerCase())).reduce(
(count, word) => {
if(word.length <= 3) { count++; } else {
word = word.replace(/(?:[^laeiouy]es|ed|[^laeiouy]e)$/u, empty).replace(/^y/u, empty);
const match = word.match(/[aeiouy]{1,2}/ug);
count += match === null ? 0 : match.length;
}
return count;
},
0
);
}
export default syllables;