正则表达式的Javascript

A L*_*A L 1 javascript regex

我正在尝试学习一些基本的Javascript正则表达式.作为初学者,我阅读了文档和这个问题: 如何在JavaScript正则表达式中访问匹配的组?

我想我已经破译了大部分表达方式:

/(?:^|\s)format_(.*?)(?:\s|$)/g
Run Code Online (Sandbox Code Playgroud)

除此部分外:

(.*?)
Run Code Online (Sandbox Code Playgroud)

我知道

.*
Run Code Online (Sandbox Code Playgroud)

匹配任何字符的0次或更多次出现(换行符或行终止符除外).

但我无法弄清楚为什么

?
Run Code Online (Sandbox Code Playgroud)

需要.

我正在玩类似的东西:

/(?:^|\s)ab(.*?)ab(?:\s|$)/
' ab4545ab '
Run Code Online (Sandbox Code Playgroud)

无论有没有,事情都表现得一样

?
Run Code Online (Sandbox Code Playgroud)

(.*?)
Run Code Online (Sandbox Code Playgroud)

有什么想法吗?

谢谢!

小智 5

这使得.*非贪婪.这意味着正则表达式中第一次出现的下一个有效字符序列将停止.*.

没有?,.*将消耗直到正则表达式中下一个有效字符序列的最后一次出现.

var s = "foo bar boo bar foo";

var greedy = /.*bar/;
var no_greed = /.*?bar/;

greedy.exec(s); // foo bar boo bar

no_greed.exec(s); // foo bar
Run Code Online (Sandbox Code Playgroud)

所以贪婪的人消耗了第一个"酒吧"到最后一个"酒吧".

非贪婪只进入第一个"酒吧".