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种修饰符了,不知道后面还会不会有其他的,真的是太多了,根本学不完….