Javascript 获取两个最接近的单词之间的字符串
假设我有以下字符串: “狗猫喂猫狗狗喂猫世界” 还有“你好”和“世界”这两个词 我想得到这些单词之间的字符串,以及两个单词之间最接近的位置(就单词数量而言)。在本例中,以下字符串位于这两个单词之间:Javascript 获取两个最接近的单词之间的字符串,javascript,regex,Javascript,Regex,假设我有以下字符串: “狗猫喂猫狗狗喂猫世界” 还有“你好”和“世界”这两个词 我想得到这些单词之间的字符串,以及两个单词之间最接近的位置(就单词数量而言)。在本例中,以下字符串位于这两个单词之间: “猫,狗,狗,你好,猫” “猫” 由于“hello”和“world”在第二个选项中是最接近的,因此在本例中,期望的结果将是“cat” 如何在regEx(JS风格)中实现这一点 我能想到的最好的办法就是 (?<=hello\s+).*?(?=\s+world) (?您可以使用负前瞻来使用此正则
(?<=hello\s+).*?(?=\s+world)
(?您可以使用负前瞻来使用此正则表达式:
/\bhello\s+((?:(?!\bhello\b).)*?)\s+world\b/
(?:(?!\bhello\b)。
匹配下一个位置没有worldhello
的字符
/\bhello\s+((?:(?!\bhello\b).)*?)\s+world\b/
(?:(?!\bhello\b).
匹配下一个位置没有worldhello
的字符您可以在模式开始时使用*\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),直到不再匹配为止\