[英]Regex asterisk usage
根据MDN x* : *Matches the preceding item x 0 or more times.*
本质上,前面的字符应该是完全可选的。 字符串将被匹配,无论它们是否存在。 那为什么呢:
1。
var text = "foobar";
var re = /q*/;
var found = text.match(re);
console.log(found); // prints '["", index: 0, input: "foobar"]'
但
var re = /qz*/;
console.log(found); // prints 'null'
这两个表达式均不存在,因此应匹配0次,并应返回'“”'。
要么:
2。
var re = /fz*/;
console.log(found); // prints '["f", index: 0, input: "foobar"]'
但
var re = /fzq*/;
console.log(found); // prints 'null'
这里发生了什么事? 据我了解, 'fzq'
不存在,因此应匹配0次,并且应返回'“”',对吗? 如果以某种方式匹配每个字符而不是整个字符串,则'fzq*'
应返回与'fz'
相同的结果- 'f'
匹配一次,其余匹配0次。 但是显然这不是正在发生的事情。
有人可以阐明这里发生的事情吗?
x *: 匹配前一项x 0次或多次。
您误解了该语句以及*
匹配零次或多次之前的所有情况 。
当您匹配q*
,正则表达式将在输入字符串中搜索q
。 由于foobar
没有q
,它将返回一个空字符串。
当您尝试匹配qz*
,正则表达式将尝试在q
之后搜索任意数量的z
。 由于输入字符串中没有q
,它将返回null
。
要用*
或任何其他量词匹配更多字符,您需要使用括号将它们分组。
(qz)*
这意味着将字符串qz
匹配零次或多次。
要了解正则表达式,可以使用https://regex101.com/网站。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.