Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/17.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
查找匹配前后的文本-jquery_Jquery_Regex - Fatal编程技术网

查找匹配前后的文本-jquery

查找匹配前后的文本-jquery,jquery,regex,Jquery,Regex,我正在尝试进行搜索并返回包含搜索词的代码段 输入:`我是飞行员。我也会弹钢琴,但他不是一个音乐家 好歌手 我做意大利菜` 搜索:钢琴 结果:也会弹钢琴,但我不会 规则: 搜索词前两个词+搜索词+搜索词后四个词 不区分大小写 精确匹配,若搜索词是单词的一部分,则应忽略。搜索人应忽略开曼群岛 var needle = "Piano"; var haystack = "I am a pilot. I can also play piano, however I am not a good sin

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

输入:`我是飞行员。我也会弹钢琴,但他不是一个音乐家

好歌手

我做意大利菜`

搜索:钢琴

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

规则

  • 搜索词前两个词+搜索词+搜索词后四个词
  • 不区分大小写
  • 精确匹配,若搜索词是单词的一部分,则应忽略。搜索应忽略开曼群岛

    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到2组单词(
[a-Za-z]+
),然后是可选标点符号(我允许使用
,您可以根据需要扩展该组)和一些空格,然后是指针,然后是1到4组可选标点符号、一些空格和一个单词。由于量词是贪婪的,如果前面有两个词,后面有四个词,那么它们就会返回

var needle=“Piano”;
var haystack=“我是一名飞行员。我还可以玩\n\
\
钢琴,但是我\n\
我不是一个\n\
好歌手。”;
search_regexp=newregexp(“(([A-Za-z]+[,]?\\s+{1,2}”)(“+needle+”(([,]?\\s+[A-Za-z]+){1,4}”),“gi”);
var thismatcharray=haystack.match(search\u regexp);
log(thismatcharray);
替换_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$4$5');

控制台日志(输出)
[^nedl]
=
[^nedl]
。它不匹配任何字符,只匹配
指针
,只匹配字符类中字符以外的任何字符。@WiktorStribiżew您更熟悉正则表达式的js风格。知道为什么我的解决方案不起作用吗?我认为这不是一个模式问题,而是一个语法问题。@emsimpson92将变量传递给正则表达式时,您会犯一个非常常见的错误。看这真的管用!如果可以的话,还有一个问题吗?有没有办法用别的东西代替针?我需要在搜索中突出显示指针,因此通常我想将piano替换为“+指针+”。您是否仍然需要前后两个单词以及突出显示?我认为输入实际上没有换行符,如果有,它将匹配正则表达式中的
\s
。我编辑的答案有实际的新行,效果很好。很高兴你把它整理好了-抱歉不能提供更多,我正在睡觉。。。我将编辑这篇文章,使其与有效的正则表达式保持最新。实际上,我看到了我的最新编辑,问题是
与JS中的换行符不匹配,因此需要在
的开头和结尾将
*
更改为
[\\s]*
,这样就不需要修剪了