这两个正则表达式之间有什么区别?(理解?量词)

Noo*_*r_1 9 javascript regex quantifiers

Eloquent JavaScript 第9章:正则表达式下的" 解析INI文件 "一节中,有一个例子,其中包含一个我根本没有捕获的正则表达式.作者试图解析下一个内容:

searchengine=http://www.google.com/search?q=$1
spitefulness=9.7

; comments are preceded by a semicolon...
; each section concerns an individual enemy
[larry]
fullname=Larry Doe
type=kindergarten bully
website=http://www.geocities.com/CapeCanaveral/11451

[gargamel]
fullname=Gargamel
type=evil sorcerer
outputdir=/home/marijn/enemies/gargamel
Run Code Online (Sandbox Code Playgroud)

关于这种格式的规则说明

以分号开头的空行和行将被忽略.

解析此内容的代码遍历文件中的每一行.为了处理评论,他包括了这个表达式

^\s*(;.*)?
Run Code Online (Sandbox Code Playgroud)

据我所知,这个表达式可以从一系列序列开始

空格字符,包括空格,制表符,换页符,换行符和其他Unicode空格

(来源),直到它出现一个分号; 然后是一系列" 除行终止符之外的任何单个字符:\n,\ r,\ u2028或\ u2029. ".所有这些仅限于{0,1}出场.

我没有得到量词的观点这里.我无法找到(regex101)任何不限制匹配字符串外观的情况都是个问题.为什么表达式与另一个表达式不同:

^\s*(;.*)
Run Code Online (Sandbox Code Playgroud)

提前致谢.

Wik*_*żew 6

^\s*(;.*)要求;,它不能匹配一个空行.

^\s*(;.*)?可以匹配空行,它不需要;.

常见的部分是^\s*- 行(或字符串)的开头,然后是零或更多的空格.

然后1)(;.*)匹配一个;(1个实例必须)然后(;.*)?匹配除换行之外的零个或多个字符,并且2)匹配一个可选序列((...)?因为它?是一个量化器,匹配量化原子的一个或零个出现,而原子可以是一个符号,一个字符类,一个,;后面跟着一个换行符以外的0+个字符.

另外,请注意\s匹配LF和CR符号,这意味着(如果MULTILINE修饰符为ON且输入是包含多行的文本),正则表达式^\s*可以跨多行匹配,直到第一个非空白字符.