前端对于字符串的校验经常性的需要用到正则表达式这个工具,通过字符串自身调用的方法可以进行复杂的字符串匹配:
replace():
用于在字符串中用一些字符替换一个与正则表达式匹配的子串-string.replace(正则,替换的字符)
search:
检索与正则表达式相匹配的子字符串-string.search(正则)
split:
用于把一个字符串分割成字符串数组-string.split(正则,返回数组最大长度-可选)
match:
找到一个或多个正则表达式的匹配,返回的是值不是位置-string.match(正则)
以上是字符串自身调用的方法,还有正则自身可以调用的方法:
var test = new RegExp("\\w+");
var test = /\w+/;
test.test(字符串):
用于检测一个字符串是否匹配某个模式,如果字符串中有匹配的值返回 true ,否则返回 false
test.exec(字符串):
用于检索字符串中的正则表达式的匹配,如果字符串中有匹配的值返回该匹配值,否则返回 null
注意:
match与exec不同,在exec的返回的数组中会有index,input,groups这三个属性:
index: 匹配文本第一个字符的位置;
input: 被检索的字符串;
groups: 命名捕获组,如果没有设置全名捕获组groups的值为undefined
| 正则修饰符: | |
|---|---|
| i | 执行对大小写不敏感的匹配 |
| g | 执行全局匹配(查找所有匹配而非在找到第一个匹配后停止) |
| m | 执行多行匹配 |
| 方括号 | 方括号用于查找某个范围内的字符 |
|---|---|
| [abc] | 查找方括号之间的任何字符 |
| [^abc] | 查找任何不在方括号之间的字符 |
| [0-9] | 查找任何从 0 至 9 的数字 |
| [a-z] | 查找任何从小写 a 到小写 z 的字符 |
| [A-Z] | 查找任何从大写 A 到大写 Z 的字符 |
| [A-z] | 查找任何从大写 A 到小写 z 的字符 |
| [abcd] | 查找给定集合内的任何字符 |
| [^abcd] | 查找给定集合外的任何字符 |
| (red|blue) | 查找任何指定的选项(red或blue) |
| 元字符 | 拥有特殊含义的字符 |
|---|---|
| . | 查找单个字符,除了换行和行结束符: /a.b/ 查找a跟b之间只有一个字符的字符串 |
| \w | 查找数字、字母及下划线, 等价于"[A-Za-z0-9_]" |
| \W | 查找非单词字符, 等价于"[^A-Za-z0-9_]" |
| \d | 查找数字, 等价于[0-9] |
| \D | 查找非数字, 等价于[^0-9] |
| \s | 查找空白字符(空格/制表 /回车/换行/垂直换行/换页), 等价于[ \f\n\r\t\v] |
| \b | 查找位于单词的开头或结尾的匹配: “er\b"可以匹配"never"中的“er”,但不能匹配"verb"中的"er” |
| \B | 匹配非单词边界: “er\B"能匹配"verb"中的"er”,但不能匹配"never"中的"er" |
| \0 | 查找 NULL 字符 |
| \cx | 查找由x指明的控制字符, \cM匹配一个Control-M或回车符, x的值必须为A-Z或a-z之一。否则, 将c视为一个原义的"c"字符 |
| \xxx | 查找以八进制数 xxx 规定的字符, /\127/g 查找w |
| \xdd | 查找以十六进制数 dd 规定的字符, /\x57/g 查找w |
| \uxxxx | 查找以十六进制数 xxxx 规定的 Unicode 字符, /\u0057/g 查找w |
| \n | 查找换行符,等价于\x0a和\cJ |
| \f | 查找换页符, 等价于\x0c和\cL |
| \r | 查找回车符 , 等价于\x0d和\cM |
| \t | 查找制表符, 等价于\x09和\cI |
| \v | 查找垂直制表符, 等价于\x09和\cI |
| 量词 | |
|---|---|
| \ | 将下一个字符标记为一个特殊字符、或一个原义字符、或一个向后引用、或一个八进制转义符:“n"查找字符"n”。“\n"查找一个换行符。串行”\"查找\ 而 “\(” 则查找 “(” |
| ^ | 查找输入字符串的开始位置。如果设置了RegExp对象的Multiline属性,^也查找“\n”或“\r”之后的位置 |
| $ | 查找输入字符串的结束位置。如果设置了RegExp对象的Multiline属性,$也匹配“\n”或“\r”之前的位置 |
| * | 查找前面的子表达式零次或多次: zo*能查找“z”以及“zoo”。*等价于{0,} |
| + | 查找前面的子表达式一次或多次: “zo+”能查找“zo”以及“zoo”,但不能查找“z”。+等价于{1,} |
| ? | 查找前面的子表达式零次或一次: “do(es)?”可以查找“does”或“does”中的“do”。?等价于{0,1} |
| n{X} | 查找包含 X 个 n 的序列的字符串: /a{2}/ 查找不到"candy," 中的 “a”,但是查找的到 “caandy,” 中的两个 “a”,且查找的是 “caaandy.” 中的前两个 “a” |
| n{X,} | X 是一个正整数,前面的模式 n 连续出现至少 X 次时查找: /a{2,}/ 查找不到 “candy” 中的 “a”,但是查找的到 “caandy” 和 “caaaaaaandy.” 中所有的 “a” |
| n{X,Y} | X 和 Y 为正整数,前面的模式 n 连续出现至少 X 次,至多 Y 次时查找 |
| ?=n | 查找任何其后紧接指定字符串 n 的字符串 |
| ?!n | 任何其后没有紧接指定字符串 n 的字符串 |
| 常用正则表达式: | |
|---|---|
| 用户名 | /^[a-z0-9_-]{3,16}$/ |
| 密码 | /^[a-z0-9_-]{6,18}$/ |
| 十六进制值 | `/^#?([a-f0-9]{6} |
| 电子邮箱 | /^([a-z0-9_\.-]+)@([\da-z\.-]+)\.([a-z\.]{2,6})$/或者/^[a-z\d]+(\.[a-z\d]+)*@([\da-z](-[\da-z])?)+(\.{1,2}[a-z]+)+$/ |
| URL | /^(https?:\/\/)?([\da-z\.-]+)\.([a-z\.]{2,6})([\/\w \.-]*)*\/?$/ |
| IP 地址 | `/((2[0-4]\d |
| Unicode编码中的汉字范围 | /^[\u2E80-\u9FFF]+$/ |
| 日期(年-月-日) | `(\d{4} |
| 日期(月/日/年) | `((1[0-2]) |
| 时间(小时:分钟, 24小时制) | `((1 |
小记:
正则中要对小括号进行处理需要[]包裹即[)]才能识别
正则中的两个字符之间的获取:/第一个字符(\S*)第二个字符/
本文深入介绍了正则表达式在前端字符串校验中的应用,包括replace()、search()、split()、match()等方法。同时讲解了正则自身的test()和exec()方法,以及各种元字符、量词和修饰符的使用。还提供了常见正则表达式实例,如用户名、密码、邮箱和URL的验证规则。此外,探讨了正则表达式在处理小括号、获取字符串间字符等方面的操作技巧。

7263

被折叠的 条评论
为什么被折叠?



