\ d和\ d +之间有区别吗?

时间:2016-06-29 21:34:09

标签: javascript regex

https://www.freecodecamp.com/challenges/find-numbers-with-regular-expressions

我在FCC做了一课,他们提到数字选择器\ d找到一个数字并在选择器前面添加+(\ d +)允许它搜索多个数字。

我对它进行了一些实验,并注意到在搜索每个数字而不是+的表达式之后的g。我尝试在表达式后使用\ d +而没有g,它只匹配字符串中的第一个数字。

基本上,无论我使用\ d还是\ d +,只要我在表达式后面有g,它就会找到所有的数字。所以我的问题是,两者有什么区别?

from __future__ import unicode_literals

from django.db import models

class BookManager(models.Manager):
    def title_count(self, keyword):
        return self.filter(title__icontains=keyword).count()

class Book(models.Model):
    title = models.CharField(max_length=100)
    authors = models.ManyToManyField(Author)
    publisher = models.ForeignKey(Publisher, on_delete=models.PROTECT)
    publication_date = models.DateField()
    num_pages = models.IntegerField(blank=True, null=True)
    objects = BookManager()

    def __str__(self):
        return self.title

3 个答案:

答案 0 :(得分:6)

最后的g表示global,即。您想要搜索所有事件。没有它,你只会得到第一场比赛。

如你所知,

\d意味着一个数字。您可以添加量词来指定是否要匹配以下所有内容,或之后的一定数量的数字。

\d表示单个数字

\d+表示所有连续数字

所以,让我们说我们有一个这样的字符串:

123 456
7890123

/\d/g将匹配[1,2,3,4,5,6,7,8,9,0,1,2,3]

/\d/将匹配1

/\d+/将匹配123

/\d+/g将匹配[123,456,7890123]

您还可以使用/\d{1,3}/g表示您希望匹配序列中1到3位数的所有匹配项。

另一个常见的量词是星号,表示0或更多。例如,/1\d*/g将匹配以1开头的所有数字序列,并且后面有0位或更多位数。

答案 1 :(得分:3)

计算\d的出现次数将在字符串中找到位数

计算\d+的出现次数将在字符串中找到整数的数量。

123 456 789

有9个,但有3个整数

答案 2 :(得分:1)

\d表示从0到9的任何数字,+表示"一次或多次"。

只要您的数字是单个数字就没有区别,但在字符串中#34;我有23头奶牛"并且\d将匹配2,而\d+将匹配23.