mirror of
https://github.com/outline/outline.git
synced 2025-12-30 07:19:52 -06:00
66 lines
1.6 KiB
TypeScript
66 lines
1.6 KiB
TypeScript
/**
|
|
* Returns the index of the first occurrence of a substring in a string that matches a regular expression.
|
|
*
|
|
* @param text The string to search in.
|
|
* @param re The regular expression to search for.
|
|
* @param startPos The position in the string at which to begin the search. Defaults to 0.
|
|
*/
|
|
export const regexIndexOf = function (
|
|
text: string,
|
|
re: RegExp,
|
|
startPos?: number
|
|
) {
|
|
startPos = startPos || 0;
|
|
|
|
if (!re.global) {
|
|
const flags = "g" + (re.multiline ? "m" : "") + (re.ignoreCase ? "i" : "");
|
|
re = new RegExp(re.source, flags);
|
|
}
|
|
|
|
re.lastIndex = startPos;
|
|
const match = re.exec(text);
|
|
|
|
if (match) {
|
|
return match.index;
|
|
} else {
|
|
return -1;
|
|
}
|
|
};
|
|
|
|
/**
|
|
* Returns the index of the last occurrence of a substring in a string that matches a regular expression.
|
|
*
|
|
* @param text The string to search in.
|
|
* @param re The regular expression to search for.
|
|
* @param startPos The position in the string at which to begin the search. Defaults to the end of the string.
|
|
*/
|
|
export const regexLastIndexOf = function (
|
|
text: string,
|
|
re: RegExp,
|
|
startPos?: number
|
|
) {
|
|
startPos = startPos === undefined ? text.length : startPos;
|
|
|
|
if (!re.global) {
|
|
const flags = "g" + (re.multiline ? "m" : "") + (re.ignoreCase ? "i" : "");
|
|
re = new RegExp(re.source, flags);
|
|
}
|
|
|
|
let lastSuccess = -1;
|
|
for (let pos = 0; pos <= startPos; pos++) {
|
|
re.lastIndex = pos;
|
|
|
|
const match = re.exec(text);
|
|
if (!match) {
|
|
break;
|
|
}
|
|
|
|
pos = match.index;
|
|
if (pos <= startPos) {
|
|
lastSuccess = pos;
|
|
}
|
|
}
|
|
|
|
return lastSuccess;
|
|
};
|