粗略的可以参考https://www.runoob.com/jsref/jsref-obj-regexp.html
什么是正则表达式?
正则表达式是由一个字符序列形成的搜索模式。
当你在文本中搜索数据时,你可以用搜索模式来描述你要查询的内容。
正则表达式可以是一个简单的字符,或一个更复杂的模式。
正则表达式可用于所有文本搜索和文本替换的操作。
一些常见的正则表达式https://blog.csdn.net/lm1022/article/details/79050083
项目中遇到一种情景,在用户登录的时候使用js的正则表达式判断输入是否为[字母][数字][下划线]的组合,且仅包含此三种符号。使用表达式和函数如下:
function isValid(str) { return /(?=.*[A-Za-z])(?=.*[\d])(?=.*_)(^[0-9a-zA-Z_]{1,}$)/.test(str); }
讲解一下:
- 第一个括号内是查找匹配出后面跟着某个字母的字符串,这说明了整个字符串中含有字母。
- 再通过类似的方法查找匹配出来的字符串中是否含有数字、下划线_。
- 到第四个括号时,已经说明整个字符串中同时含有字母、数字、下划线_。
- 最后一个括号里,针对匹配出来的字符串,查找其开头和结尾是[字母、数字、下划线_]的字符串。其中(^n+$)是常见的一种正则表达式,用于确定字符串由n组成,n可以是一个集合,(^n+$)相当于(^n{1,}$)。
?=n | 匹配任何其后紧接指定字符串 n 的字符串。 |
. | 查找单个字符,除了换行和行结束符。 |
[0-9] | 查找任何从 0 至 9 的数字。 |
[a-z] | 查找任何从小写 a 到小写 z 的字符。 |
[A-Z] | 查找任何从大写 A 到大写 Z 的字符。 |
[A-z] | 查找任何从大写 A 到小写 z 的字符。 |
\d | 查找数字。 |
n* |
匹配任何包含零个或多个 n 的字符串。 例如,/bo*/ 匹配 "A ghost booooed" 中的 "boooo","A bird warbled" 中的 "b",但是不匹配 "A goat grunted"。 |
n{X,} |
X 是一个正整数。前面的模式 n 连续出现至少 X 次时匹配。 例如,/a{2,}/ 不匹配 "candy" 中的 "a",但是匹配 "caandy" 和 "caaaaaaandy." 中所有的 "a"。 |
^n | 匹配任何开头为 n 的字符串。 |
n$ | 匹配任何结尾为 n 的字符串。 |
推荐一下正则表达式生成网站http://tools.jb51.net/regex/create_reg,可以根据条件自动生成正则表达式
再强烈推荐一个正则表达式的debug网站https://regex101.com
可以在REGULAR EXPRESSION中输入正则表达式,下面的TEST STRING中输入测试字符串,右边会对于正则表达式的含义进行解释。
需要注意此部分的输入会被整体看做一个字符串进行测试,并不是每一行测试一次。
好在可以测试实时输入,右边会实时显示测试是否通过。
这个网站还有一个特别好的地方,如果输入的字符串匹配失败,在你输入的正则表达式右上角有个debug按钮(小甲虫图标),点击后可以进入debug界面https://regex101.com/debugger
在这里可以分步查看匹配流程,默认是查看50步,可以自行修改步数。通过匹配流程可以更好地理解正则表达式