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

问题描述 投票:0回答:1

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

例如,如果我有一个示例字符串,我正在寻找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实例之间的全部单词量。Current output

但是,我想要的是这样的东西:Expected output

javascript regex regex-lookarounds
1个回答
0
投票

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


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

See regex in use here

\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从字面上匹配(再次不区分大小写)]

0
投票

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

See regex in use here

\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从字面上匹配(再次不区分大小写)]
© www.soinside.com 2019 - 2024. All rights reserved.