繁体   English   中英

js正则表达式量词和全局标志输出空字符串作为匹配数组中的最后一个元素

[英]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的匹配是:

  1. [0-3] ddd

  2. [3-3]``

它使用字符串的最后一个作为与索引的匹配: [3-3]

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

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