35 lines
735 B
TypeScript
35 lines
735 B
TypeScript
import { WORD } from '../../utils/hashtags';
|
|
|
|
export const textAtCursorMatchesToken = (
|
|
str: string,
|
|
caretPosition: number,
|
|
searchTokens: string[],
|
|
) => {
|
|
let word: string;
|
|
|
|
const regex = new RegExp(
|
|
`[${searchTokens.join('')}${WORD}]+(\\s[${WORD}]+)?$`,
|
|
'iu',
|
|
);
|
|
const left = str.slice(0, caretPosition).search(regex);
|
|
const right = str.slice(caretPosition).search(/\s/);
|
|
|
|
if (right < 0) {
|
|
word = str.slice(left);
|
|
} else {
|
|
word = str.slice(left, right + caretPosition);
|
|
}
|
|
|
|
word = word.trim();
|
|
|
|
if (word.length < 3 || (word[0] && !searchTokens.includes(word[0]))) {
|
|
return [null, null];
|
|
}
|
|
|
|
if (word.length > 0) {
|
|
return [left + 1, word];
|
|
} else {
|
|
return [null, null];
|
|
}
|
|
};
|