正则表达式:Regular Expression
描述一个字符串中字符出现规律的规则
语法:
-
一个固定的关键词原文,也是一种最简单的规则
-
字符集:规定一个字符上可用的备选字符列表
何时:只要一位字符有多个备选字 [备选字列表]
简写:如果备选字符列表连续,可用-省略中间字符
[0-9] 一位数字
[a-z] 一位小写字母
[A-Z] 一位大写字母
[A-Za-z] 一位字母
[A-Za-z0-9] 一位字母或数字
[\u4e00-\u9fa5] 一位汉字
排除:[ ^xxx]
-
预定义字符集
对常用字符集的简化:
\d 一位数字
\w [0-9A-Za-z_] 一位数字、字母、下划线
\s 一位空字符,包括:空格,tab,…
. 通配符
-
量词:专门规定一个字符集出现次数的规则
2大类:
-
有明确数量边界
{6,8} 至少6个,最多8个
{6,} 至少6个,多了不限
{6} 必须6个,不能多不能少
-
没有明确数量边界
?可有可无,最多一个 {0,1}
*可有可无,多了不限 {0,}
+至少一个,多了不限 {1,}
-
-
选择和分组
选择: 或 |
分组:将多个规则,用()包裹为一个整体
为什么: 量词默认仅修饰相邻的前一个字符集
何时: 只要一个量词,要修饰多个字符集时
如何: (规则1规则2…)量词
-
匹配特殊位置
^ 字符串开头 比如:字符串开头的空字符 ^\s+
$ 字符串结尾 比如:字符串结尾的空字符\s+¥
\b 单词边界:^ $ 空格 标点符号 比如:查找单词no,不包含单词内的no \bno\b
eg:
身份证号:15位数字 2位数字 一个数字或X或x (后三位整体可有可无,最多一个)
\d{15} ( \d\d [0-9Xx] )?
手机号:+86 或者0086 可有可无,最多一次
空字符 可有可无,多了无限
1
3,4,5,7,8 选一个
9位数字
(\ +86|0086)?\s*1[34578]\d{9}
严格地,1([358] [0-9]|4[579]|66|7[0135678]|9[89])[0-9]{8}/$
微信 wei xin w x
(微|w(ei)?)\s*(信|x(in)?)
js的几个方法
验证:
reg.test(str) //表单验证常用,reg必须前加^,后加$
查找
-
判断是否包含符合正则条件的敏感词:
var i=str.search(/reg/i) i表示不区分大小写 ignore
查找str中第一个符合正则要求的关键词的位置,找不到 返回-1
-
获取所有关键词的内容
var kwords=str.match(/正则/ig) g表示查找所有,不加g默认查找第一个 global
查找str中所有关键词的内容,返回关键词数组,找不到 返回null
-
既查找关键词内容,又查找位置
var arr=reg.exec(str) 在str中找下一个关键词的内容和位置
返回值:arr[0] :本次查找内容
arr[index]:本次查找位置
替换:
-
简单替换: 将所有关键词,替换为统一的新内容
str=str.replace(/reg/ig,‘新值’) 新值为"" :删除
-
高级替换: 根据每个关键词的不同,动态选择不同的新值替换
str=str.replace(
/正则/ig,
function(kword){//每找到一个关键词,就自动调用该function
//kword会自动获得本次找到的一个关键词
return 根据kword的不同,返回不同的新值
}
)
动态生成正则表达式
var reg=new RegExp(“正则”,“ig”) 专门用于动态生成正则表达式
此时的正则表达式支持js语法,注意:"" 中出现\或",改为\和"