突出显示单词并提取其附近文本的功能

时间:2011-10-26 00:23:36

标签: php javascript jquery regex

我有一个例如文字:

  

Etiam porta sem malesuada magna mollis euismod。整数posuere erat a   ante venenatis dapibus posuere velit aliquet。 Etiam porta sem   malesuada magna mollis euismod。 Aenean eu leo quam。 Pellentesque   ornare sem lacinia quam venenatis vestibulum。 Fusce dapibus,tellus ac   cursus commodo,tortor mauris condimentum nibh,ut fermentum massa   justo坐下来。

     

Nulla vitae elit libero,一个pharetra 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。整数posuere erat   一个anate venenatis dapibus posuere velit aliquet。

     

Cras mattis consectetur purus 坐在发酵乳中。 Etiam porta sem   malesuada magna mollis euismod。 Praesent commodo 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 sit amet   发酵。 Etiam porta ....

如您所见,我不仅会显示突出显示的单词,还会显示其前后的某些文字。 什么是实现这一目标的最佳方法?

我在我的网站上使用swish-e图书馆作为搜索引擎,我的cgi知识是空的,所以我更喜欢尝试php方式。

非常感谢你的帮助

3 个答案:

答案 0 :(得分:5)

在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个单词或.,-之一(微调这个),然后是您要查找的单词(最后有或没有标点符号),后跟0-5个单词。这永远不会在中间打破一个单词,因为达到了一定数量的字符。

输出:

  

posuere velit aliquet。

     

Cras mattis consectetur purus sit amet fermentum。 Etiam porta

现在你可以对此进行微调,例如移除\n,添加...,突出显示consectetur purus ...

答案 1 :(得分:1)

这取决于您在搜索请求和搜索引擎的工作方式后得到答案的方式。

如果你的目标是“打字”搜索,就像“谷歌”那样 - 那么最好通过php来削减传输的数据并浪费更少的流量。

否则,如果您将整个文本作为响应并且不介意加载 - 使用RegExp或使用string.charAt( int )计算JS。

答案 2 :(得分:0)

我们创建了一个小库来完成这项工作。它会突出显示您提到的单词,并为您提供查询单词周围的句子。

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

这将产生以下文字:

Lorem ipsum dolor坐下来,精神上的aditistur elit。 ... Etiam bibendum lorem nec tempus sollicitudin。 ... dapibus中的Sed lorem 。 ... Nunc turpis ipsum,bibendum quis sodales sed,ullamcorper et lorem 。 Donec et metus hendrerit,interdum elit ut,dignissim dui。

类als支持设置html标签以突出显示,并设置最小和最大字fopr片段。

请参阅Github上的swisnl/textsnippet