我试图在文本正文中找到一个短语的部分(使用jQuery / JS),如下例所示:
短语:一开始,上帝创造了天地 .
文字:Lorem ipsum dolor sit amet,consectetur adipiscing elit,sed do eiusmod tempor incididunt ut labore et dolore magna aliqua . Ut enim ad minim veniam,quis nostrud exercitation ullamco laboris nisi ut aliquip ex ea commodo consequat . In the beginning Duis aute irure dolor in repreptderit in voluptate velit esse cillum dolore eu fugiat nulla pariatur . Excepteur sint occaecat cupidatat non proident,sunt in culpa qui officia deserunt mollit anim id est laborum .
它可能不是整个短语,而只是短语中的几个单词 . 基本上我想找到与原始短语的一部分匹配的单词序列 .
我已经做了很多搜索,但还没有提出任何想法 .
进一步澄清:用户可以输入短语“在上帝创造的开始”,文本可能只能说“上帝创造” . 尽管如此,应该突出显示“上帝创造”,因为它与用户输入的部分短语相匹配 .
7 回答
Try this: 使用正则表达式的短代码
我是这样的:
这是一个可以玩的JSFiddle:http://jsfiddle.net/remus/mgv6mvwn/
你可以将这一点压缩一点,但为了清楚起见,我会这样做 .
First 您需要将搜索文本分解为组成单词 - 在有序列表中 . 忽略多个空格或标点符号的问题,这可以使用拆分简单地完成:
var search_str =“一开始上帝创造了”
var list = search_str.split()
Second 您需要使用该列表生成您想要匹配的单词组合 .
list [1] , list [2] , list [3],...
list [1] " " list [2] , list [2] " " list [3] , list [3] " " list [4],...
list [1] " " list [2] " " list [3] , list [2] " " list [3] " " list [4] , list [3] " " list [4] " " list [5],...
等等
这很可能 - 但编程这样的东西很麻烦 . 我不打算在这里试试 .
稍后您需要查看RegExp以允许长白色空格和标点符号 .
在这里,您可以决定是否要在搜索短语中搜索整个短语或每个单词,就像您要求的那样 . 然后,它将在原始文本下方的div中输出搜索和突出显示的文本,或者您可以通过更改此行将其更改为输出而不是原始文本:请参阅代码下方的选项以供使用 .
至
DEMO
HTML:
JS:
OPTIONS:
通过在空白区域上拆分搜索文本来创建正则表达式的方法可能有效 .
搜索短语
"In the beginning"
可以转换为正则表达式:[^\w<>]
将使用非单词字符,但不使用HTML标记分隔符 .|(?=<)
因此它也将匹配(但不是connsume)打开或关闭HTML标记的开头 .HTML:
JavaScript的:
jsfiddle:http://jsfiddle.net/ta80a9h2/
尝试
我不确定你在原帖中提出的问题,但假设你知道你要查找的序列,你可以使用
indexOf()
方法返回给定值在字符串中的位置 .