[英]js regex quantifiers and global flag outputs empty string as the last element in the matched array
我有:
var str = 'ddd';
var r = /d*/g;
console.log(str.match(r))
我的控制台中的输出是两个数组; 第一个是包含'ddd'
的字符串,第二个是一个空字符串。 我知道*
意思是(0或更多),但是为什么它输出那个空字符串呢? 我希望仅输入一个字符串'ddd'
。 一旦与d
键匹配,为什么只继续输入该空字符串?
如果我在没有g
标志的情况下进行调用,它将输出我真正希望它执行的操作。
我还知道g意味着全局搜索,它会遍历str
所有元素,但是当我的搜索在第一个比赛中完成时,那又如何呢?
模式d*
表示“ d*
零次或多次出现”。 零出现的'd'是空字符串。 贪婪*
首先匹配字符串中的所有'd'字符,然后匹配最后一个'd'和字符串结尾之间的所有字符。
模式上的g
标志指示正则表达式匹配机制迭代地重试匹配。 第一次迭代匹配所有“ d”字符。 那时,剩下的字符串基本上就是空字符串。 长度为零的字符串。 匹配成功的方式与"".match(/d*/g)
成功的方式相同。
逻辑上您在这里有两场比赛:
第一个是'ddd' :
与d*
逻辑d*
。
第二个是'' :
这对于d*
也是合乎逻辑的,因为*
表示零或很多次,这里的d等于零,并且它不是空格,只是一个空字符串,因此基本上任何字符串都可以匹配它。
您应该一直使用d+
。
编辑:
您可以在此演示中看到,使用ddd
的匹配是:
[0-3] ddd
[3-3]``
它使用字符串的最后一个作为与索引的匹配: [3-3]
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.