如何在不编写正则言论的情况下写正则
#javascript #typescript #regex

我知道,写下正则是很困难的,但是毫无疑问,这是世界上最无聊的任务之一,如果您不了解它,那就太令人沮丧了。所以今天我向您介绍 Magic-regexp

此库允许您使用非常自然和直观的语法创建正则表达式。

首先,我们需要安装它

npm install magic-regexp

现在,让我们创建一个数组,我们可以在其中测试表达式

const stringsToParse = [
    "id: 123",
    "there is no id",
    "random string id: 1",
    "[INFO] id: 12",
    "id: 1a",
    "random log info id: 4b93H6Hd random log",
    "id: 4b93H6Hd"
]

第一个案例

我们的第一种情况将是一个简单的情况,只需匹配字符串“ ID:”

import { createRegExp, exactly } from 'magic-regexp'

const regex = createRegExp(
    exactly('id: ')
)

Regex to find exact string with magic-regexp

我们可以看到几乎所有字符串都与我们的正则符合符合条件,只有第二个不包含确切的字符串“ ID:”。

第二种情况

让我们做一些更复杂的事情。让我们再次找到“ id:”一词,但是现在我们也希望它遵循字母或数字,并且长度在2到6之间。

import { createRegExp, exactly, letter, digit } from 'magic-regexp'

const regex = createRegExp(
    exactly('id: ')
    .and(letter.or(digit).times.between(2, 6))
)

Regex to find exact string and specific length

您可以看到,第三个单词不匹配,因为ID之后的数字仅包含一个字母/数字。

第三种情况

所以,让我们在这里再添加一件事,.at.lineStart()。顾名思义,它只会关心您的病情开始时的弦。

import { createRegExp, exactly, letter, digit } from 'magic-regexp'

const regex = createRegExp(
    exactly('id: ')
    .at.lineStart()
    .and(letter.or(digit).times.between(2, 6))
)

Regex to find exact string, specific length and at the beggining

您可以看到,只有那些与以前的条件匹配的条件和以我们的“ ID:”匹配条件的条件。

第四案

让我们进一步推动事情。让我们添加.at.lineEnd()。顾名思义,它只会查找线路末端的。请注意,我们将其放入and()函数中。

import { createRegExp, exactly, letter, digit } from 'magic-regexp'

const regex = createRegExp(
    exactly('id: ')
    .at.lineStart()
    .and(letter.or(digit).times.between(2, 6).at.lineEnd())
)

Regex to find exact string, specific lengt, at the beggining and at the end

在这种特定条件下,只有两个字符串满足条件。

概括

您可以看到,如果您没有正则经验,用更自然的语言编写正则表达式要容易得多。您可以使用此库做更多的事情,您可以直接检查documentation

这篇文章的一个很大的灵感来自此Youtube Video,所以检查一下是否想要更多视觉效果:)