我正在尝试学习一些基本的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)
所以贪婪的人消耗了第一个"酒吧"到最后一个"酒吧".
非贪婪只进入第一个"酒吧".