UNPKG

yoastseo-dep

Version:

Yoast clientside page analysis

63 lines (50 loc) 1.59 kB
import { filter, flatMap, map } from "lodash-es"; import { getBlocks } from "./html"; /** * Matches the paragraphs in <p>-tags and returns the text in them. * * @param {string} text The text to match paragraph in. * * @returns {array} An array containing all paragraphs texts. */ const getParagraphsInTags = function( text ) { let paragraphs = []; // Matches everything between the <p> and </p> tags. const regex = /<p(?:[^>]+)?>(.*?)<\/p>/ig; let match; while ( ( match = regex.exec( text ) ) !== null ) { paragraphs.push( match ); } // Returns only the text from within the paragraph tags. paragraphs = map( paragraphs, function( paragraph ) { return paragraph[ 1 ]; } ); return paragraphs.filter( paragraph => paragraph.length > 0 ); }; /** * Returns an array with all paragraphs from the text. * * @param {string} text The text to match paragraph in. * * @returns {Array} The array containing all paragraphs from the text. */ export default function( text ) { let paragraphs = getParagraphsInTags( text ); if ( paragraphs.length > 0 ) { return paragraphs; } // If no <p> tags found, split on double linebreaks. let blocks = getBlocks( text ); blocks = filter( blocks, function( block ) { // Match explicit paragraph tags, or if a block has no HTML tags. return 0 !== block.indexOf( "<h" ); } ); paragraphs = flatMap( blocks, function( block ) { return block.split( "\n\n" ); } ); if ( paragraphs.length > 0 ) { return paragraphs; } // If no paragraphs are found, return an array containing the entire text. return [ text ]; }