Ваш код в настоящее время ничего не соответствует по двум причинам:
- Вы используете границы слов с
\b
, что означает, что будет работать только совпадение для отдельного слова. В коде вашего вопроса egseg
нигде не является отдельным словом. В коде в скрипте eg
является отдельным словом, но оно существует в самом конце строки - Вам требуется хотя бы один символ до и после соответствующего слово с вашим
{1,' + truncateLength + '}
. Вот почему в скрипте eg
не совпадает.
Если вы хотите сопоставить searchExpression
где угодно , удалите границы слова и используйте {0,
, а не {1,
, в случае совпадения в начале или конце строки:
const truncateHighlightedText = (
sentence,
searchExpression,
truncateLength
) => {
const pattern = new RegExp(
'\\b.{0,' +
truncateLength +
'}' +
searchExpression +
'.{0,' +
truncateLength +
'}\\b',
'i'
);
console.log(pattern)
return sentence.match(pattern);
};
const sentence = "Testsdfgbsegsegsrewgserwfgvsrevfse ewrwer wergwregew erwgrewgwerg erwgwr eerg rg g er egr ew erger rtggrt tr ert tr tr tg tgr gtr gtr egrt rtg trg rg e eg";
const searchExpression = "egseg";
const truncateLength = 30;
const result = truncateHighlightedText(sentence, searchExpression, truncateLength);
console.log(result);
Чтобы добавить ...
s к концам, которые содержат дополнительные непоказанные символы, опционально захватите символ до и после матча в обходных жетонах и добавьте ...
s, если они Поймал что-нибудь:
const truncateHighlightedText = (
sentence,
searchExpression,
truncateLength
) => {
const pattern = new RegExp(
'(?<=(.)?)\\b.{0,' +
truncateLength +
'}' +
searchExpression +
'.{0,' +
truncateLength +
'}\\b(?=(.)?)',
'i'
);
const match = sentence.match(pattern);
return (match[1] ? '...' : '') + match[0] + (match[2] ? '...' : '');
};
const sentence = "Testsdfgbsegsegsrewgserwfgvsrevfse ewrwer wergwregew erwgrewgwerg erwgwr eerg rg g er egr ew erger rtggrt tr ert tr tr tg tgr gtr gtr egrt rtg trg rg e eg";
const searchExpression = "egseg";
const truncateLength = 30;
const result = truncateHighlightedText(sentence, searchExpression, truncateLength);
console.log(result);
Без обратной связи используйте группы захвата везде вместо match[0]
:
const truncateHighlightedText = (
sentence,
searchExpression,
truncateLength
) => {
const pattern = new RegExp(
'(.)?(\\b.{0,' +
truncateLength +
'}' +
searchExpression +
'.{0,' +
truncateLength +
'})\\b(.)?',
'i'
);
const match = sentence.match(pattern);
return (match[1] ? '...' : '') + match[2] + (match[3] ? '...' : '');
};
const sentence = "Testsdfgbsegsegsrewgserwfgvsrevfse ewrwer wergwregew erwgrewgwerg erwgwr eerg rg g er egr ew erger rtggrt tr ert tr tr tg tgr gtr gtr egrt rtg trg rg e eg";
const searchExpression = "egseg";
const truncateLength = 30;
const result = truncateHighlightedText(sentence, searchExpression, truncateLength);
console.log(result);