正则表达式星号用法

时间:2017-06-16 04:16:26

标签: javascript regex

根据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次。但显然这不是发生的事情。

有人能说清楚这里到底发生了什么吗?

1 个答案:

答案 0 :(得分:2)

  

x *:匹配前面的项目x 0次或更多次。

*匹配零次或多次之前,您误解了所有的语句。

当您匹配q*时,正则表达式将在输入字符串中搜索q。由于q中没有foobar,它会返回一个空字符串。

当您尝试匹配qz*时,正则表达式会尝试在z 之后搜索任意数量的q。由于输入字符串中没有q,因此它会返回null

要按*或任何其他量词匹配更多字符,您需要使用括号对它们进行分组。

(qz)*

表示匹配字符串qz零次或多次。

要了解正则表达式,您可以使用https://regex101.com/网站。