正则表达式
正则表达式是一个描述字符模式的对象,可以用来
检查一个串是否含有某种子串、将匹配的子串做
替换或者从某个串中取出符合某个条件的子串
等
字符串正则的方法
- match
- split
- replace
- search
语法
//普通方式:
var reg=/表达式/附加参数
//例:
var reg=/white/;
var reg=/white/g;
//构造函数:
var reg=new RegExp("表达式","附加参数")
var reg=new RegExp("white");
var reg=new RegExp("white","g");
正则常见的方法
test
返回一个boolean值
使用场景: 表单验证
exec
如果匹配,返回数组
如果不匹配,返回 null
使用场景: 提取满足条件的数据
匹配规则
单字符匹配
x
匹配 x
[xyz]
-
[abc]
匹配 a , b , c 任意一个字符 -
[0-9]
匹配任意一个数字 -
[a-zA-Z]
匹配 任意一个字母 -
[a-zA-Z0-9-]
匹配任意字母、数字 和 - -
[^0-9]
匹配任意一个非数字
多字符匹配
-
X*
匹配 0个或多个 X 匹配的内容 -
X+
匹配 1个或多个 X 匹配的内容 -
X?
匹配 0个或1个 X 匹配的内容 -
X{m}
匹配 m个 X 匹配的内容 -
X{m, }
匹配 至少m个 X匹配的内容 -
X{m, n}
匹配 至少m个,最多n个 X匹配的内容
PS: m <= n
元字符
-
\d
等价与 [0-9] -
\D
等价与 [^0-9] -
\w
等价与 [a-zA-Z0-9_] -
\W
对 \w 取反 -
\s
匹配任意一个空白字符
包括 空格、制表符、换行符等 -
\S
匹配任意一个非空白字符
点字符
-
. (dot)
匹配 除 换行 符 之外的任意一个字符 -
\.
匹配 一个 点
贪婪式表达式
-
X*
等价与 X{0,} -
X+
等价与 X{1, } -
X?
等价与X{0,1}
非贪婪式表达式
-
*?
等价与 X{0,} -
X+?
等价与 X{1, } -
X??
等价与X{0,1}
非贪婪式表达式、优先匹配 表达式后面的正则匹配的内容,非贪婪式表达式 尽可能少的匹配元素
限定符
^
出现在正则的头部
代表以 … 开头
$
出现在 正则的尾部
代表 以 … 结尾
选择
|
(a|b)
正则修饰符
-
i 忽略大小写
-
g 全局模式
-
s dotAll 模式
正则表达式中 点 字符 默认匹配除 \n 之外的其他字符
添加 s 修饰符后,可以匹配 任意字符 -
m 多行匹配模式
如果 正则使用了限定符 ^ 或者 $,
则 \n 会被默认认为一行的结尾
需要匹配多行、可以添加 m 修饰符 -
y 粘连模式
常用的正则表达式表
一、数字的正则表达式
- 数字:
^[0-9]*$
- n位的数字:
^\d{n}$
- 至少n位的数字:
^\d{n,}$
- m-n位的数字:
^\d{m,n}$
- 零和非零开头的数字:
^(0|[1-9][0-9]*)$
- 非零开头的最多带两位小数的数字:
^([1-9][0-9]*)+(.[0-9]{1,2})?$
- 带1-2位小数的正数或负数:
^(\-)?\d+(\.\d{1,2})?$
- 正数、负数、和小数:
^(\-|\+)?\d+(\.\d+)?$
二、字符的正则表达式
- 汉字:\^[\u4e00-\u9fa5]{0,}$
var str = "38u48djhfod中国,@##@!_)+bia發財サービス二條한국어國家";
var reg = /[\u4e00-\u9fa5]+/g;
console.log(str.match(reg));
- 英文和数字:
^[A-Za-z0-9]+$ 或 ^[A-Za-z0-9]{4,40}$
- 长度为3-20的所有字符:
^.{3,20}$
- 由26个英文字母组成的字符串:
^[A-Za-z]+$
- 由26个大写英文字母组成的字符串:
^[A-Z]+$
- 由26个小写英文字母组成的字符串:
^[a-z]+$
- 由数字和26个英文字母组成的字符串:
^[A-Za-z0-9]+$
- 由数字、26个英文字母或者下划线组成的字符串:
^\w+$ 或 ^\w{3,20}$
- 中文、英文、数字包括下划线:
^[\u4E00-\u9FA5A-Za-z0-9_]+$
- 中文、英文、数字但不包括下划线等符号:
^[\u4E00-\u9FA5A-Za-z0-9]+$ 或 ^[\u4E00-\u9FA5A-Za-z0-9]{2,20}$
特殊需求正则表达式
- Email地址:
^\w+([-+.]\w+)*@\w+([-.]\w+)*\.\w+([-.]\w+)*$
- 域名:
[a-zA-Z0-9][-a-zA-Z0-9]{0,62}(/.[a-zA-Z0-9][-a-zA-Z0-9]{0,62})+/.?
- URL:
[a-zA-z]+://[^\s]* 或 ^http://([\w-]+\.)+[\w-]+(/[\w-./?%&=]*)?$
- 手机号码:
\^[1][3,4,5,7,8][0-9]{9}$
- 15或18位身份证:
^\d{15}|\d{18}$
- 15位身份证:
^[1-9]\d{7}((0\d)|(1[0-2]))(([0|1|2]\d)|3[0-1])\d{3}$
- 18位身份证:
^[1-9]\d{5}[1-9]\d{3}((0\d)|(1[0-2]))(([0|1|2]\d)|3[0-1])\d{4}$
- 短身份证号码(数字、字母x结尾):
^([0-9]){7,18}(x|X)?$ 或 ^\d{8,18}|[0-9x]{8,18}|[0-9X]{8,18}?$
- 帐号是否合法(字母开头,允许5-16字节,允许字母数字下划线):
\^[a-zA-Z][a-zA-Z0-9_]{4,15}$
- 密码(以字母开头,长度在6~18之间,只能包含字母、数字和下划线):
\^[a-zA-Z]\w{5,17}$
- 强密码(必须包含大小写字母和数字的组合,不能使用特殊字符,长度在8-10之间):
\^(?=.*\d)(?=.*[a-z])(?=.*[A-Z]).{8,10}$
- 日期格式:
^\d{4}-\d{1,2}-\d{1,2}
- IP地址:
\d+\.\d+\.\d+\.\d+
其他符号 了解即可
分组(…)
(\d+)
对匹配内容进行分组
(?\d+)
命名分组
正则匹配的内容会交给 key
断言
?= 正向确定断言
示例: /\d+(?=%)/.exec(“昨天股票涨了20%,今天跌了50%,损失了8000元”)
只匹配百分号之前的数字
?! 正向否定断言
示例 :/\d{2,}(?!%)/.exec(“昨天股票涨了20%,今天跌了50%,损失了8000元”)
只匹配非百分号之前的数字
?<= 反向确定断言
示例: /(?<=$)\d+/.exec("$1 兑换 ¥6")
只匹配美元符号之后的数字
?<! 反向否定断言
示例 : /(?<!$)\d+/.exec("$1 兑换 ¥6")
只匹配不在美元符号后面的数字