首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么regex在使用全局搜索和{0,}量词时匹配字符串的结尾?

为什么regex在使用全局搜索和{0,}量词时匹配字符串的结尾?
EN

Software Engineering用户
提问于 2015-07-30 09:05:52
回答 1查看 1.9K关注 0票数 4

我问了这里一个关于js、regex、量词和全局搜索的问题。我终于明白了这是怎么回事,但是,让我们以一个具体的例子,然后我将写我的问题。

基于同样的例子

代码语言:javascript
复制
var str = 'ddd';
var r = /d*/g;
console.log(str.match(r))

它输出这个数组:["ddd", ""]

我理解数组中的第一项是因为它匹配字母d,而最后一项(那个空字符串)是因为它匹配字符串的末尾,这不是什么,所以*有意义,因为它匹配0或更多的事件.

所以,我的问题是:

  • 为什么会发生这种事?
  • 为什么它只需要查询字符串的末尾才能最终获得真正的匹配呢?

在我看来,不应该查询字符串的末尾(Ddd);因为它不像我的字符串在'ddd‘末尾包含一个空空间。如果我的字符串是空的,那么匹配是合乎逻辑的,但在这种情况下则不是。我的逻辑是:

对于字符串中的每个字符,这个搜索/regex (d*) ...so为什么只在字符串的末尾继续呢?它应该停止在我的字符串的最后一个字符,在本例中是d.

EN

回答 1

Software Engineering用户

发布于 2015-07-30 09:13:56

正则表达式将''空字符串与d*匹配,因为*量化符意味着0或多次,这里是零d

它是匹配的,因为当您使用g修饰符时,它不会在第一个匹配中停止并继续匹配,这就是为什么您将得到第二个匹配。

这是演示,没有g修饰符,它与''不匹配。

因此,如果不希望它与第二个匹配,则只需删除g修饰符,或者更好地使用以下正则表达式之一:

代码语言:javascript
复制
var r = /(^d*$)/g;
//Or the following one
var r = /(d+)/g;

您将强制它只获得精确包含字母d的字符串。

你可以在这里看到演示

票数 2
EN
页面原文内容由Software Engineering提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://softwareengineering.stackexchange.com/questions/291273

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档