正则问题
正则格式
var reg = / /; 不能拼接
var reg = new RegExp(" "); 可以拼接字符串
元字符:
具有特殊意义
\:转义字符
^:以某一个元字符开始
$:以一个元字符结尾
\n:匹配一个换行符
.:除了\n以外的任意字符
():分组
x|y:x或者y中的一个
[xyz]:x或者y或者z中的一个
[^xyz]:除了三个以外的认可一个字符
[a-z]:a-z之间的任何一个字符
[^a-z]:除了a-z之间的任何一个字符
\d: 一个0-9之间的数字
\D:除了0-9之间的数字以外的任何字符
\b:
\w:数字 字母 下划线中任意一个字符[0-9a-zA-Z_]
\s:匹配一个空白字符 空格 一个制表符(tab)
代表出现次数
*:出现0-n次
+:出现1-n次
?:出现0或1
{n}:出现n次
{n,}:出现n到多次
{n,m}:出现n到m次
+? 只匹配最低个数
(?:元字符) 分组不捕获
[ ] 中字符屏蔽特殊含义 [+-] 表示+ -中的一个
() 改变优先级
var reg = / ^18|19$/;
// 18 19 181 189 119 1819 819....
var reg =/^(18|19)$/;
// 18 19
正则方法
reg.test(str)
reg.exec(str)
正则捕获 返回一个数组 返回符合的第一项内容 index:捕获内容在字符串中开始的索引位置 input:原始字符串
没有 返回null
每次执行exec只捕获第一个匹配的内容。后续内容不匹配。
原因:正则 lastIndex 默认为0 不管执行几次都是从头开始
正则修饰符
g、i、m
global() 全局匹配 var reg = / /g; lastIndex 值将改变 变成最新值
ingoreCase() : 忽略大小写
multiline():多行匹配
exec 和 match
match 是字符串方法
他们具体基本相同的功能 match 一次捕获所有 符合条件的 字符串
exec 需要执行多次
match方法 也有其局限性 当正则内出现分组 则无法匹配 而只能按最大正则匹配
exec 可以匹配大正则 也可以匹配小正则
例:
var reg=/^chen(\d+)$ /g;
var str ="chen12chen34chen56";
reg.exec(str);
返回"chen12","12" index:0
reg.macth(str)
返回chen12