40 lines
1.0 KiB
TypeScript
40 lines
1.0 KiB
TypeScript
export const splitRangeWithinString = (
|
|
string: string,
|
|
start: number,
|
|
end: number
|
|
) => {
|
|
const isStartOutOfBounds = start > string.length || start < 0;
|
|
const isEndOutOfBounds = end > string.length || end < 0;
|
|
const isInvalidRange = start > end;
|
|
|
|
if (isStartOutOfBounds || isEndOutOfBounds || isInvalidRange) {
|
|
return [string];
|
|
} else {
|
|
return [
|
|
string.slice(0, start),
|
|
string.slice(start, end),
|
|
string.slice(end),
|
|
].filter((slice) => slice.length > 0);
|
|
}
|
|
};
|
|
|
|
export const getIndexOfQueryInString = (string: string, query: string) => {
|
|
const lowercasedTitle = string.toLowerCase();
|
|
const lowercasedQuery = query.toLowerCase();
|
|
return lowercasedTitle.indexOf(lowercasedQuery);
|
|
};
|
|
|
|
export const splitQueryInString = (string: string, query: string) => {
|
|
const indexOfQueryInTitle = getIndexOfQueryInString(string, query);
|
|
|
|
if (indexOfQueryInTitle < 0) {
|
|
return [string];
|
|
}
|
|
|
|
return splitRangeWithinString(
|
|
string,
|
|
indexOfQueryInTitle,
|
|
indexOfQueryInTitle + query.length
|
|
);
|
|
};
|