Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/16.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 为什么不情愿的量词选择下一个atom regexp参数?_Javascript_Regex_Non Greedy - Fatal编程技术网

Javascript 为什么不情愿的量词选择下一个atom regexp参数?

Javascript 为什么不情愿的量词选择下一个atom regexp参数?,javascript,regex,non-greedy,Javascript,Regex,Non Greedy,我明白了根据正常的quantify选择并返回最小值,但我不明白为什么要定义下一个regexp原子的选择不贪婪。有人知道是否有一个表示不情愿的量词的基本表达式(如果存在的话)?如果我看到了我能理解的表达式,但我只搜索并找到了对?=和联合使用的引用但我不知道是否是这样,因为我无法使用它 如何工作(我猜): console.log(“贪婪的regexp示例(预期\“'blablabla'是'bla'\”); log(“'blablabla'是'bla'所以…).match(/'.'*/); log(

我明白了根据正常的quantify选择并返回最小值,但我不明白为什么要定义下一个regexp原子的选择不贪婪。有人知道是否有一个表示不情愿的量词的基本表达式(如果存在的话)?如果我看到了我能理解的表达式,但我只搜索并找到了对
?=
联合使用的引用但我不知道是否是这样,因为我无法使用它

如何工作(我猜):

console.log(“贪婪的regexp示例(预期\“'blablabla'是'bla'\”);
log(“'blablabla'是'bla'所以…).match(/'.'*/);
log(“非贪婪的regexp示例(预期为\“''\”但返回\“'blablabla'\”));

console.log(“'blablabla'是'bla'所以…).match(/'.*?'/)
*
使表达式变得贪婪

使表达式变懒

在这种情况下,
match(/“.*?”/)
被读取为“单引号后跟任何字符(.)零次或多次(*),但仅在下一个(?)单引号之前”

大多数正则表达式备忘单都会描述这类表达式。就我个人而言,我喜欢(州*是贪婪的)

*
声明为贪婪


*
声明为贪婪。

*
使表达式贪婪” — 否,
*
是一个量词,当在标记后使用时,它使正则表达式与该标记匹配零次或多次。这与贪婪无关。缺少限定符
(在量词之后)是导致子表达式贪婪的原因。如果需要
使“*”不贪婪,那么
*
怎么不贪婪呢?你有任何资源来说明这一点吗?我所看到的一切都将
*
归类为贪婪。贪婪的不是
*
。默认情况下,一切都是贪婪的,除非
限定符存在。
不是贪婪的,示例中的单引号也不是贪婪的。是的,它是贪婪的<代码>
只匹配一个字符。一旦比赛结束,比赛就结束了,在那之后,再也没有其他的比赛了。这是贪婪。如果它不是贪婪的,
几乎总是不匹配任何东西,例如
“abc”。匹配(/./)
将是
空的
[“”]
,但它不是。非贪婪单
看起来像
/。??/
,其中第一个
意思是
{0,1}
(至少0,最多1),第二个
意思是“尽可能少地使用字符”(在本例中为0)。请澄清文章的第一句话好吗?目前,它在语法上是不正确的,所以很难理解你期望什么以及为什么。你认为在
/'.*中什么是贪婪的和非贪婪的?'/
?我不明白你为什么期望第二个正则表达式是
'
。非贪婪匹配在那里的行为是正确的。你到底期望什么?为什么?如果您只希望匹配分隔符,那么您所期望的不是非贪婪匹配;将已知的分隔符与regex匹配有什么意义?我希望
'
,因为在一个示例中
(“abla”).match(/a.*?/)
返回
“a”
,因为其中提到了算法的逻辑,但是如果我把
(“abla”).match(/a.*a/)放进去
its返回整个值
(“abla”)。match(/a.*?/)
返回
[“a”]
,因为
*?
意味着“匹配任何字符(
),零次或多次(
*
),尽可能少的次数(
)”。“尽可能少的次数”是不同的,这取决于围绕这个子表达式还需要匹配什么。