我正在尝试使用 Jest 中的match
函数使用正则表达式。
我有一个值,其中卡号被字符X
屏蔽了 9 次。
我想确保值中的X
出现 9 次,而不是更多或更少的次数。
不确定是我的正则表达式是错误的还是我对开玩笑中match
的理解。
例如:
test("cardNumber should be masked XXXXXXXXX", () => {
const val = 'XXXXXXXXX1111';
const regX = new RegExp(/([X]{9})/);
expect(val).toMatch(regX);
});
事实证明,这与 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}$/);