javascript 正则表达式
正则表达式
基本结构
- 正则表达式由斜线
/包围的模式组成,例如: /abc/
- 可以使用 new Regexp() 构造函数可以一颗创建正则表达式
元字符
.: 匹配任何除换行之外的单个字符
*: 匹配一个字符 0次或者多次
+: 匹配前一个字符1次或多次
?: 匹配前一个字符0次或1次
{n}: 匹配一个字符正好n次
{n,}: 匹配一个字符n次或多次
{n, m}: 匹配一个字符至少n次,但不超过m次
^: 匹配输出字符串的开始位置
$: 匹配输入字符串的结束位置
\d: 匹配一个数字字符
\D: 匹配一个非数字字符
\w: 匹配一个单词字符(字母、数字、下划线)
\W: 匹配一个非单词字符
\s: 匹配任何空白字符串,包括空格、制表符、换页符等
\S: 陪陪任何非空字符串
\b: 匹配一个单词边界
\B: 匹配一个非单词边界
字符类
- 使用 方括号[] 定义一个字符集,例如:
[abc] 表示匹配 a、b 或 c
- 可以在 方括号[]内 使用
^ 符号表示否定,例如: [^abc] 表示 匹配除 a、b和c 之外的任意字符
选择、分组和引用
- |: 用于选择,匹配左边或者右边的模式
- (): 用于分组,可以将一部分模式组合在一起
- \1、\2: 引用前面的分组
修饰符
g: 全局搜索,不仅返回第一个匹配,而是返回所有的匹配
i: 不区分大小写搜索
m: 多行搜索、让^、$ 分别匹配字符串的开始和结束,以及任何行的开始和结束
y: 执行“粘性”搜索,要求匹配必须从给定的位置开始
u: 将模式视为Unicode 序列点的序列,这样就能正确的吃力四个字节的UTF-16编码
s: 让 . 特殊字符匹配任何字符(包括\n和\w)
方法
exec(): 在字符串中执行搜索匹配
test(): 检测字符串中是否有匹配
match(): 在字符串中查找匹配项,并返回匹配的数组
replace(): 在字符串中替换匹配项
search(): 在字符串中搜素匹配项,并返回索引
split(): 使用正则表达式将字符串分割为数组
正则表达式对象属性
global: boolean, 表示是否设置了 g 修饰符
ignoreCase: boolean, 表示是否设置了 i 修饰符
lastIndex: 整数,表示下一次匹配的开始位置
multiline: boolean, 表示是否设置了m修饰符
source: 正则表达式的源文本
sticky: boolean, 表示是否设置了 y 修饰符
unicode: boolean, 表示是否设置了 u 修饰符
常用正则表达式规则匹配
- 匹配数字:
/^\d+$/: 匹配正整数
/^\d*.?\d*$/: 匹配非负整数(包括0)
/^-[1-9]\d*$/: 匹配负整数
/^-?\d+$/: 匹配整数(整数、负数、0)
/^[1-9]\d*\.\d*|0\.\d*[1-9]\d*$/: 匹配正浮点数
/^\d*\.?\d*(?!\.\d)$/: 匹配非负浮点数(包括0)
/^-([1-9]\d*\.\d*|0\.\d*[1-9]\d*)$/: 匹配负浮点数
/^-?\d*\.?\d*(?!\.\d)$/: 匹配浮点数(包括正浮点数、0、负浮点数)
- 匹配字母和数字
/^\w+$/: 匹配由数字、26个英文字母或下划线组成的字符串
/^[A-Za-z0-9]$/: 匹配由字母和数字组成的字符串
- 匹配中文
^[\u4e00-\u9fa5]+$: 匹配中文字符
- 匹配特定格式
/^[a-z]+$/: 匹配由小写字母组成的字符串
/^[A-Z]+$/: 匹配由大写字母组成的字符串
/^[A-Za-z]+$/: 匹配由字母组成的字符串(不区分大小写)
/^[A-Za-z0-9]+$/: 匹配由数字和26个英文字母组成的字符串
/^\w+$/: 匹配由数字、26个英文字母或者下划线组成的字符串
^\w+([\.-]?\w+)*@\w+([\.-]?\w+)*(\.\w{2,3})+$: 匹配邮箱地址
/^0\d{2}-?\d{8}$/: 匹配国内电话号码(以3位区号、8位电话号码为例)
^\d{15}|\d{18}$: 匹配身份证号(15位或18位)
/^(https?:\/\/)?([\da-z\.-]+)\.([a-z\.]{2,6})([\/\w \.-]*)*\/?$/: 匹配URL
- 匹配特定字符
/^\s*$/: 匹配由空格组成的字符串
^\S*$: 匹配由非空格字符组成的字符串
/^\t*$/: 匹配由制表符组成的字符串
^\T*$: 匹配由非制表符组成的字符串
- 其他常见规则匹配
/^特定字符串/: 匹配开头是某个特定字符串
/特定字符串$/ : 匹配结尾是某个特定字符串
/.*特定字符串.*/: 匹配包含某个特定字符串
^(?!.*特定字符串).*$: 匹配不包含某个特定字符串