这个正则修饰符可能没用过

js正则表达式的修饰符有i,g,m,y,s,u,d 每种都有各自的用途,然而今年修饰符家族又增加了一个 v , 原本它只是个提案,今年已经正式成为标准了,都已经过去差不多半年的时间了。一直也没用到它,所以也没有太过关注。直接最近的一个需求让我又相起它

写一个正则

需求是只能输入字母及数字,其它的都不可以,所以需要对输入框中的内容进行校验。这个正则也是不难

1
const reg = /^[a-zA-Z\d]*$/;

再常规不过的一个正则,以前也写过不少类似的。但是当回头再看这个正则的时候,总觉得别扭,这不就是\w所代表的字符集中除去一个 _ 字符么,由于不支持输入 _ 所以只能把 \w 展开,并刨除 _ 。如果可以通过运算的方式来实现这个功能会不会更好呢。这不 v 修饰符再次进入的我的视野

修饰符 v

使用 v 修饰符之后,正则可以支持差集及交集这样的运算功能

1
const reg = /^[\w--_]*$/v;

这个正则表示从 \w 所代表的字符集合中去除 _ , 也就是差集运算。中间的-- 就表示正则匹配的字符包含在前面的集合中,但是不包含在后面的集合中

1
const reg = /^[[1-7]&&[5-9]]*$/v;

这个正则做的是交集运算,&& 符号表示匹配字符既包含在 [1-7] 中也你包含在 [5-9] 中。也就是匹配 [5-7]

这个例子只是简单演示一下差集和交集的使用方式。实际工作中应该没人会直接写 /^[[1-7]&&[5-9]]*$/v 这样的正则吧。实际使用过程中可能更多的会搭配 \p{Emoji}\p{Script=Greek} 这些 unicode 字符集合。估计我是用不到这些 unicode 集合了,所以就不管了


已经8种修饰符了,不知道后面还会不会有其他的,真的是太多了,根本学不完….