前端对于字符串的校验经常性的需要用到正则表达式这个工具,通过字符串自身调用的方法可以进行复杂的字符串匹配:
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*)第二个字符/