正则训练中的正则表达式

时间:2017-06-14 17:55:40

标签: jquery regex jestjs

我试图在jest中使用匹配函数来使用正则表达式。 我有一个值,其中卡号用字符X屏蔽9次。 我想确保值中的X出现9次而不是更多或更少次。

不确定我的regEx是错误的还是我对开玩笑的理解。

例子。

test("cardNumber should be masked XXXXXXXXX", () =>{

    const val = 'XXXXXXXXX1111';
    const regX = new RegExp(/([X]{9})/);
    expect(val).toMatch(regX);

});

1 个答案:

答案 0 :(得分:2)

事实证明这与 Jest 无关,但您提供上下文以防万一是件好事。

正则表达式模式的一些问题/误解,一些装饰性的,一个不是:

[X]X 相同。正则表达式模式中的括号表示一个字符组(匹配组内的任何字符),这里不需要。

() 创建一个捕获组,也没有必要这样做,因为我们只想要字符串是否匹配的是/否答案。

鉴于此,我们可以将模式简化为 /X{9}/,它匹配包含字符串中任意位置的 9 个连续 X 字符的字符串。因此,这将匹配字符串 "XXXXXXXXXXXXXXXXXXXX1111""foobar XXXXXXXXX quux",并且根据您的规范,这些是误报。

尽管您的规范并不完全清楚,但根据后续评论,修复可能会使用锚点。 /^X{9}\d{4}$/ 似乎最精确,指定正好 9 个 X 字符后跟 4 个数字,字符串的前后分别以 ^$ 锚定。您可以使用 /^X{9}\d+$/ 来放松它,以使用一位或多位数字。

顺便说一句,您不需要在此处使用 new RegExp 构造函数。直接的正则表达式文字更清晰:

expect(val).toMatch(/^X{9}\d{4}$/);