我试图在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);
});
答案 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}$/);