Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/20.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
Javascript 只有一个工作边界,两个正则表达式怎么会如此不同?_Javascript_Regex - Fatal编程技术网

Javascript 只有一个工作边界,两个正则表达式怎么会如此不同?

Javascript 只有一个工作边界,两个正则表达式怎么会如此不同?,javascript,regex,Javascript,Regex,我在寻找一个正则表达式,它能找到紧跟在单词cat后面的单词,所以我想出了两个正则表达式,我知道第二个是正确的。但我不明白,仅仅用一个词的边界,结果就完全不同了,我不明白为什么。这两个正则表达式之间到底有什么区别 有两个正则表达式: const regex=/\w+(?=\w+cat)\b/g; const str=“zex dsfsdjf dsf sdlf cat catestrophic caty wcat”; console.log(str.match(regex))很简单: 在\w+

我在寻找一个正则表达式,它能找到紧跟在单词
cat
后面的单词,所以我想出了两个正则表达式,我知道第二个是正确的。但我不明白,仅仅用一个词的边界,结果就完全不同了,我不明白为什么。这两个正则表达式之间到底有什么区别

有两个正则表达式:

const regex=/\w+(?=\w+cat)\b/g;
const str=“zex dsfsdjf dsf sdlf cat catestrophic caty wcat”;
console.log(str.match(regex))很简单:

  • \w+(?=\w+cat\b)
    中,
    \b
    是匹配的,并且在
    cat
    匹配的位置之后不立即使用:
    • 本质上,只要后面跟着
      (?=\w+cat\b)
      ,您就可以匹配并消费任何
      \w+
      匹配的内容
    • 您可以看到,
      sdlf
      是行中唯一的匹配项,因为
      (?=\W+cat\b)
      只有一个匹配项,这就是整个
      cat
  • \w+(?=\w+cat)\b
    中,
    \b
    \w+
    匹配的位置之后立即匹配和使用:
    • 只要
      \w+
      匹配的内容后面跟着
      (?=\w+cat)
      ,前者与
      \w+
      一起消费,后者不被消费,您就匹配并消费它(实际上,
      \b
      并没有被使用,因为它是一个零长度匹配,正如您在一个简单的例子中所看到的那样,多个
      \b
      就可以了)

@TimBiegeleisen在问题的第一行中提到。您是如何将regexp可视化的?这实际上是非常有启发性的。