繁体   English   中英

查找关键字匹配项,但根据ReGex JS中的单词接近度忽略

[英]Find keyword matches, but ignore based on word proximity in ReGex JS

我正在尝试为长字符串中的单词找到匹配项,但是我想在第一个匹配项附近设置一个接近度,以便忽略该接近度内匹配的所有单词。

例如,如果我有一个示例字符串,则在其中寻找test

Lorem ipsum Test sit amet, consectetur adipiscing elit. 
Vestibulum at erat ac enim malesuada pulvinar et nec ante. 
Cras erat ipsum, pellentesque vel volutpat ut, Test eu test. 
Test Quisque tincidunt varius mi.

这个示例使用了约15 words ,我的最终结果将突出显示以下内容:

Lorem ipsum **Test** sit amet, consectetur adipiscing elit. 
Vestibulum at erat ac enim malesuada pulvinar et nec ante. 
Cras erat ipsum, pellentesque vel volutpat ut, **Test** eu test. 
Test Quisque tincidunt varius mi.

因此,它只会找到第一个&&大于15个单词的Test


到目前为止,我已经尝试过类似的操作:

\\btest\\W+(?:\\w+\\W+){15,}?test\\b

但这似乎突出了之间的所有单词,当时我真的只想突出test 它还要求我设置2个关键字参数,如果可能的话,我只想使用一次test关键字。

关于如何完成这种接近行为的任何想法吗?


澄清更新:

我在这里有一个正则表达式测试器的示例: https : //regex101.com/r/FDOWZU/1您可以看到它选择了test实例之间的全部单词。 电流输出

但是,我想要的是这样的: 预期的输出

不确定您的意思是>=15还是>15因为您的代码和书面逻辑相互矛盾。 无论如何,您都可以将14替换为所要求的单词数。 在这种情况下,上半部14确保test不是接下来的15个单词之一,因此只有在接下来的15个单词不是test ,它才会与test匹配。


您可以使用以下正则表达式:

查看正则表达式在这里使用

\btest(?!\W+(?:\w+\W+){0,14}test)

 s = `Lorem ipsum Test sit amet, consectetur adipiscing elit. Vestibulum at erat ac enim malesuada pulvinar et nec ante. Cras erat ipsum, pellentesque vel volutpat ut, Test eu test. Test Quisque tincidunt varius mi. Suspendisse vitae lobortis diam. Vestibulum posuere massa id lectus faucibus posuere. Donec non sollicitudin est. Donec libero turpis, malesuada in Test` r = /\\btest(?!\\W+(?:\\w+\\W+){0,14}test)/gi var m while(m = r.exec(s)) { console.log(m) } 

怎么运行的:

  • \\b字边界
  • test字面上是否匹配(不带i标志的大小写)
  • (?!\\W+(?:\\w+\\W+){0,14}test)否定前瞻,确保以下条件不匹配:
    • \\W+匹配任何非单词字符一次或多次
    • (?:\\w+\\W+){0,14}介于零和十四个字之间
    • test字面上的匹配(再次不区分大小写)

这是一个有效的正则表达式(?<!test(?:\\w|\\s)*\\W{0,14})test

这是在括号中的工作方式:

  • ?<! 是负向后看符号
  • test寻找test
  • (?:\\w|\\s)* ,后跟任意数量的非单词或空格字符
  • \\W{0,14}然后是0到14个字

所以,大家聚在一起,得出:找到所有的test没有关注一个词test单词后面添加最多15个字。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM