Javascript 获取两个最接近的单词之间的字符串

Javascript 获取两个最接近的单词之间的字符串,javascript,regex,Javascript,Regex,假设我有以下字符串: “狗猫喂猫狗狗喂猫世界” 还有“你好”和“世界”这两个词 我想得到这些单词之间的字符串,以及两个单词之间最接近的位置(就单词数量而言)。在本例中,以下字符串位于这两个单词之间: “猫,狗,狗,你好,猫” “猫” 由于“hello”和“world”在第二个选项中是最接近的,因此在本例中,期望的结果将是“cat” 如何在regEx(JS风格)中实现这一点 我能想到的最好的办法就是 (?<=hello\s+).*?(?=\s+world) (?您可以使用负前瞻来使用此正则

假设我有以下字符串:

“狗猫喂猫狗狗喂猫世界”

还有“你好”和“世界”这两个词

我想得到这些单词之间的字符串,以及两个单词之间最接近的位置(就单词数量而言)。在本例中,以下字符串位于这两个单词之间:

  • “猫,狗,狗,你好,猫”
  • “猫”
  • 由于“hello”和“world”在第二个选项中是最接近的,因此在本例中,期望的结果将是“cat”

    如何在regEx(JS风格)中实现这一点

    我能想到的最好的办法就是

    (?<=hello\s+).*?(?=\s+world)
    

    (?您可以使用负前瞻来使用此正则表达式:

    /\bhello\s+((?:(?!\bhello\b).)*?)\s+world\b/
    


    (?:(?!\bhello\b)。
    匹配下一个位置没有world
    hello
    的字符

    /\bhello\s+((?:(?!\bhello\b).)*?)\s+world\b/
    


    (?:(?!\bhello\b).
    匹配下一个位置没有world
    hello
    的字符

    您可以在模式开始时使用
    *\bhello
    贪婪地使用字符,直到最后一次出现
    hello
    ,这样您想要的是在捕获组中,而没有
    hello
    world
    内部:

    .*\bhello\s+(.*?)\s+world\b
    

    演示:

    您可以在模式开始时使用
    *\bhello
    贪婪地使用字符,直到最后一次出现
    hello
    ,这样您想要的将是在捕获组中,而不需要
    hello
    world

    .*\bhello\s+(.*?)\s+world\b
    

    演示:

    这对以下句子不起作用:
    dog-cat-hello-cat-dog-hello-cat-dog-hello-cat-world
    dog-cat-hello-cat-dog-world-hello-cat-world-cat-world-dog-hello-cat-world
    我明白了。改为使用了一个懒惰的中继器。这只是匹配了
    hello-foo-world-dog-h>和
    world
    之间的最后ello猫狗世界
    。在这里它将匹配
    你好猫狗世界
    否,您要查找的是捕获组,而不是匹配。请参阅演示:(查找页面右侧的捕获组)这对以下句子不起作用:
    dog cat hello cat dog hello cat world
    dog cat hello cat world dog hello cat world
    我明白了。改为使用一个懒惰的中继器进行修复。这只是匹配
    hello
    world
    之间的最后一个子字符串,例如
    hello foo world dog hello cat cat狗狗世界
    。在这里它将匹配
    你好猫狗世界
    不,您要查找的是捕获组,而不是匹配。请参阅演示:(查找页面右侧的捕获组)为什么,不,这不能单独用正则表达式来确定。所以,这就是答案。正则表达式不能计数,也不能在没有硬边界的情况下说出相对于其他事物的距离。这里给出的所有答案都是废话,完全错误。!!你有什么建议@slnI使用正则表达式回调来确定长度(或字数)我使用的正则表达式是
    /hello(?=(.*world)/g
    ,然后保留子字符串(第1组)使用最短的标准,直到不再匹配。\n为什么,不,这不能仅用正则表达式来确定。因此,这就是答案。正则表达式无法计数,或者没有硬边界就无法说出相对于其他对象的距离。这里给出的所有答案都是胡说,完全错误。!!您的建议是@slnI使用正则表达式回调来确定它们之间的长度(或字数)。我将使用的正则表达式是
    /hello(?=(.*world)/g
    ,然后使用最短的条件保留子字符串(组1),直到不再匹配为止\