функция, которая выделяет слово и извлекает текст рядом с ним

У меня есть текст, например:

Etiam porta sem malesuada magna mollis euismod. Целочисленное значение соответствует значению положительного эффекта. Etiam porta sem malesuada magna mollis euismod. Эйн-эй-лео-кэм. Pellentesque ornare sem lacinia quam venenatis vestibulum. Fusce dapibus, tellus ac cursus commodo, tortor mauris condimentum nibh, ut fermentum massa justo sit amet risus.

Nulla vitae elit libero, a phuera augue. Vestibulum id ligula porta felis euismod semper. Vestibulum id ligula porta felis euismod semper. Maecenas sed diam eget risus varius blandit sit amet non magna. Vestibulum id ligula porta felis euismod semper. Целочисленное значение соответствует значению положительного эффекта.

Cras mattis consectetur purus sit amet fermentum. Etiam porta sem malesuada magna mollis euismod. Praesent como cursus magna, vel scelerisque nisl consectetur et. Maecenas faucibus mollis interdum. Nullam quis risus eget urna mollis ornare vel eu leo.

Этот текст отображается как описание при поиске, выполненном на моем веб-сайте, и я хочу, чтобы можно было выделить слово / строку и извлечь текст рядом с ним.

Я не уверен, что лучший способ – это php (возможно, есть) или просто использовать функцию jquery. Я знаю, как выделить слово в jQuery, но не знаю, как извлечь текст.

В этом примере я хочу показать как описание, потому что моя искомая строка является «consectetur purus» следующим текстом.

…. posuere velit aliquet.Cras mattis consectetur purus сиденье amet fermentum. Etiam porta ….

Как вы видите, я не только показываю выделенное слово, но и текст до и после него. Какой был бы лучший способ для этого?

Я использую swish-e librari в качестве поисковой системы на своем веб-сайте, и мой knogedge cgi имеет значение null, поэтому я предпочитаю попробовать php-путь.

Большое спасибо за вашу помощь

Использование регулярного выражения в php (вы можете сделать то же самое в JavaScript, хотя).

$regex = '/([A-Za-z0-9.,-]+\s*){0,5}\sconsectetur purus(\s|[,.!?])(\s*[A-Za-z0-9.,-]+){0,5}/'; preg_match($regex, $content, $matches); echo $matches[0]; 

Это соответствует 0-5 словам, построенным с использованием буквенно-цифровых символов или одного из .,- (finetune this), за которым следуют слова, которые вы ищете (с или без пунктуации в конце), а затем 0-5 слов. Это никогда не сломает слово посередине, потому что достигается определенное количество символов.

Вывод:

posuere velit aliquet.

Cras mattis consectetur purus sit amet fermentum. Etiam porta

Теперь вы можете это сделать, например, удалить \n , добавить ... , выделить consectetur purus

Это зависит от того, как вы получите ответ после запроса на поиск и способ работы поисковой системы.

Если вы нацелены на поиск «набрав», например «Google», тогда было бы лучше сделать это с помощью php, чтобы сократить переданные данные и тратить меньше трафика.

В противном случае, если вы получите весь текст в качестве ответа и не против загрузки – сделайте это с помощью JS с помощью RegExp или считая string.charAt( int ) .

Для этого мы создали небольшую библиотеку. Он выделит слова, которые вы упомянули, и дайте вам выражение предложений вокруг ваших слов запроса.

 $lorumIpsum = "three paragraps of lrum ipsum"; TextSnippet::createSnippet('Lorem', $lorumIpsum); 

Это приведет к следующему тексту:

Lorem ipsum dolor sit amet, consectetur adipiscing elit. … Etiam bibendum lorem nec tempus sollicitudin. … Сед в дапибусе лорем . … Nunc turpis ipsum, bibendum quis sodales sed, ullamcorper et lorem . Donec et metus hendrerit, interdum elit ut, dignissim dui.

Класс als поддерживает настройку тега html для выделения и установки минимальных и максимальных слов fopr для фрагмента.

См. Swisnl / textnippet на Github.