在书籍《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
关于此格式的规定是:
空行和以分号开头的行将被忽略。
解析此内容的代码将遍历文件中的每一行。为了处理注释,他使用了以下表达式:
^\s*(;.*)?
据我理解,这个表达式会处理以一个序列开始的行,该序列可能包含空格、制表符、换行符和其他Unicode空格字符 (来源),直到出现分号;,然后是一系列“任何单个字符,除了行终止符:\n、\r、\u2028或\u2029。”所有这些都受限于{0,1}的出现。
我不明白为什么要在此处使用量词?。我找不到任何一个情况(regex101),在匹配字符串的数量没有限制时会出现问题。为什么这个表达式与另一个表达式不同:
^\s*(;.*)
Thanks in advance.
\s*
。(这也引起了我的注意。) - Alan Moore