在比赛之前和之后查找文本-jQuery

时间:2018-11-16 23:34:45

标签: jquery regex

我正在尝试进行搜索,并返回包含搜索项的代码段。

输入:`我是一名飞行员。我也可以弹钢琴,但是他不是

好歌手。

我会煮意大利菜。

搜索:钢琴

结果:也弹钢琴,但是我不是

规则

  • 搜索词前两个词+搜索词+搜索词后四个词
  • 不区分大小写。
  • 完全匹配,如果搜索词是单词的一部分,则应忽略。搜索 man 时应忽略 Cayman Island

    var needle = "Piano";
    var haystack = "I am a pilot. I can also play piano, however I am not a 
    
    good singer.
    I cook Italian."; // the user input from a textarea would fill in this variable and would contain new line character
    
    search_regexp = new RegExp('/([^'+ needle +']+)'+ needle +'([^'+ needle +']+)/', "gi");
    thismatcharray = haystack.match(search_regexp);
    alert(thismatcharray); 
    

我很想了解如何获取搜索值之前和之后的值组成的数组,以便可以串联以获得最终结果。谢谢。...

1 个答案:

答案 0 :(得分:1)

尝试此正则表达式。它会寻找1到2个单词组([A-Za-z]+),然后是可选的标点符号(我允许使用.,,您可以根据需要扩展该组)和一些空格,然后是针头,然后是1至4组可选的标点符号,一些空格和一个单词。由于量词是贪婪的,因此如果前面有两个单词,后面有四个单词,那么它们将返回。

var needle = "Piano";
var haystack = "I am a pilot. I can also play\n\
\
piano, however I\n\
am not a\n\
good singer.";
search_regexp = new RegExp('((([A-Za-z]+[.,]?\\s+){1,2})('+needle+')(([.,]?\\s+[A-Za-z]+){1,4}))', "gi");
var thismatcharray = haystack.match(search_regexp);
console.log(thismatcharray);
replace_regexp = new RegExp('^[\\s\\S]*?((([A-Za-z]+[.,]?\\s+){0,2})(\\b'+needle+'\\b)(([.,]?\\s+[A-Za-z]+){0,4}))[\\s\\S]*$', "i");
var output = haystack.replace(replace_regexp, '$2<label style="color: red">$4</label>$5');
console.log(output);