2017-06-16 54 views
0

根据MDN x* : *Matches the preceding item x 0 or more times.*Regex的星号的使用

本质前述字符应该是完全可选的。字符串会被匹配,无论它们是否存在。那么,为什么说:

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次。但显然这不是发生了什么事情。

难道有人会对这里发生的事情有所了解吗?

回答

2

x *:匹配前一项x 0或更多次。

你误会了这一说法与一切*之前匹配零次或多次。

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

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

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

(qz)* 

这意味着,匹配字符串qz零次或多次。

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