繁体   English   中英

正则表达式星号用法

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM