JavaScript 正则表达式 .*?

lou*_*luo 3 javascript regex

我有以下正则表达式:

var regEx = /^\W*(.*?)\W*$/;
var regEx2 = /^\W*(.*)\W*$/;
Run Code Online (Sandbox Code Playgroud)
  1. 实际上是什么(.*?)意思?(.*?)和 和有什么区别(.*)
  2. 为什么JavaScript会regEx.exec("abc ")返回?['abc ', 'abc']
  3. 为什么JavaScript会regEx2.exec("abc ")返回?['abc ', 'abc ']

nha*_*tdh 6

  1. ?在量词*+、等之后添加{n,m}会产生不情愿/惰性匹配,而不是默认的贪婪匹配。从名字上就很直观了。贪婪意味着它将尝试匹配尽可能多的。惰性意味着它将尝试尽可能少地匹配。

  2. 没有非单词\W标记,因此\W*匹配空字符串。然后(.*?)将尽可能少地匹配,但检查是否\W*可以匹配某些内容。因此(.*?)将匹配并捕获 "abc",并且\W*(非单词)将匹配空格。

  3. 与上面几乎相同,但(.*)会尽可能多地吃掉并匹配并捕获 "abc ",并\W*留下它匹配的空字符串。

对于 2 和 3,返回数组中的第二个元素是正则表达式中第一个捕获组捕获的文本。数组中的第一个元素是与整个正则表达式匹配的文本。