UNPKG

yoastseo-dep

Version:

Yoast clientside page analysis

57 lines (47 loc) 2.21 kB
import { map } from "lodash-es"; import addWordBoundary from "../word/addWordboundary.js"; import stripSpaces from "../sanitize/stripSpaces.js"; import transliterate from "../transliterate/transliterate.js"; import transliterateWP from "../transliterate/transliterateWPstyle.js"; import { replaceTurkishIsMemoized } from "../transliterate/specialCharacterMappings"; /** * Creates a regex from the keyword with included wordboundaries. * * @param {string} keyword The keyword to create a regex from. * @param {string} locale The locale. * * @returns {RegExp} Regular expression of the keyword with word boundaries. */ const toRegex = function( keyword, locale ) { keyword = addWordBoundary( keyword, false, "", locale ); return new RegExp( keyword, "ig" ); }; /** * Matches a string with and without transliteration. * @param {string} text The text to match. * @param {string} keyword The keyword to match in the text. * @param {string} locale The locale used for transliteration. * @returns {Array} All matches from the original as the transliterated text and keyword. */ export default function( text, keyword, locale ) { let keywordRegex = toRegex( keyword, locale ); if ( locale === "tr_TR" ) { const turkishMappings = replaceTurkishIsMemoized( keyword ); keywordRegex = new RegExp( turkishMappings.map( x => addWordBoundary( x ) ).join( "|" ), "ig" ); } const matches = text.match( keywordRegex ) || []; text = text.replace( keywordRegex, "" ); const transliterateKeyword = transliterate( keyword, locale ); const transliterateKeywordRegex = toRegex( transliterateKeyword, locale ); const transliterateMatches = text.match( transliterateKeywordRegex ) || []; let combinedArray = matches.concat( transliterateMatches ); const transliterateWPKeyword = transliterateWP( keyword, locale ); if ( ! ( transliterateWPKeyword === transliterateKeyword ) ) { const transliterateWPKeywordRegex = toRegex( transliterateWPKeyword, locale ); const transliterateWPMatches = text.match( transliterateWPKeywordRegex ) || []; combinedArray = combinedArray.concat( transliterateWPMatches ); } return map( combinedArray, function( match ) { return stripSpaces( match ); } ); }