JS正则表达式看不懂?
const reg = /^(?!^\d+$)(?!^[a-z]+$)(?!^[A-Z]+$)(?!^[^a-z0-9]+$)(?!^[^A-Z0-9]+$)(?!^.*[\u4E00-\u9FA5].*$)^\S*$/
百度了一个大佬写的JS正则, 此正则的意思是验证字母、数字、特殊符号至少两种的组合.虽然验证了能用, 但是本人看不懂, 求大佬拆解一下具体的含义.
回答:
具体解释如下:
^
表示匹配输入字符串的开始位置(?!^\\d+$)
表示不允许全是数字(?!^[a-z]+$)
表示不允许全是小写字母(?!^[A-Z]+$)
表示不允许全是大写字母(?!^[^a-z0-9]+$)
表示不允许全是除小写字母和数字之外的字符(?!^[^A-Z0-9]+$)
表示不允许全是除大写字母和数字之外的字符(?!^.*[\\u4E00-\\u9FA5].*$)
表示不允许包含中文字符^\\S*$
表示匹配任何不包含空格的字符
回答:
推荐一个自用的正则神器:https://codegen.bqrdh.com/regexper/
支持可视化和数据模拟生成,全中文的比较容易理解
回答:
from chatgpt
这个正则表达式用于匹配一个字符串,要求满足以下条件:
- 字符串中不能全是数字、全是小写字母、全是大写字母、全是非字母数字字符或全是非大写字母数字字符;
- 字符串中不能包含汉字(中文字符);
- 字符串不能包含空格。
具体解释如下:
- ^ 匹配字符串的开头;
- (?!^\d+$) 负向前瞻,表示字符串开头不能全是数字;
- (?!^[a-z]+$) 负向前瞻,表示字符串开头不能全是小写字母;
- (?!^[A-Z]+$) 负向前瞻,表示字符串开头不能全是大写字母;
- (?!^[^a-z0-9]+$) 负向前瞻,表示字符串开头不能全是非字母数字字符(即除了字母数字字符之外的字符);
- (?!^[^A-Z0-9]+$) 负向前瞻,表示字符串开头不能全是非大写字母数字字符(即除了大写字母数字字符之外的字符);
- (?!^.[\u4E00-\u9FA5].$) 负向前瞻,表示字符串中不能包含汉字(中文字符);
- ^\S*$ 匹配除空格之外的任意字符,且该字符必须出现0次或多次,最后以字符串结尾 $ 结束。
综上所述,这个正则表达式用来匹配一个不包含空格、不包含汉字、同时包含数字、小写字母和大写字母的字符串
回答:
详细可以看我的文章: https://segmentfault.com/a/1190000043513389
/^.............$/
, 两边的符号同时出现表示精确匹配- ()表示分组, 分组有组号, 里面的 ?! 就是非捕获分组,正向肯定预查, 此时是不占用组号的
- 每个()删除?!后比如 (^\d+$) 里面的
^.............$
表示精确匹配 \d 表示匹配数组, + 表示该数字出现一次或多次, (^\d+$)就是指匹配12131这样的 - (?!^[a-z]+$) 核心是[a-z]+, [a-z] 表示a-z, 小写字母, 整体匹配 safas这样的
- (?!^[A-Z]+$) 表示大写 FHFHFHKK
- (?!^1+$) 核心是1+, ^ 表示
以...开头
, 整体就是 9asdf ass233, 这种是以数字或小写字母开头的 - (?!^2+$) 以数字或大写字母开头的
- (?!^.[\u4E00-\u9FA5].$) .* 就是单个字符匹配任意次,即贪婪匹配, 我文章也有写, \u4E00 与 \u9FA5 中文的unicode码, 用于匹配中文
- 最后的 \S 表示非空字符, 就是不能是空格, tab等, * 是重复零次或更多次
本文参与了SegmentFault 思否面试闯关挑战赛,欢迎正在阅读的你也加入。
- a-z0-9 ↩
- A-Z0-9 ↩
回答:
网址:嗨正则 (https://hiregex.com/)
记得选语言哦!
回答:
- Regexper 正则铁道图
虽然这种正则可以一句解决,但是个人感觉效率应该不如分开写。
以上是 JS正则表达式看不懂? 的全部内容, 来源链接: utcz.com/p/945031.html