概念:一套规则,用来处理字符串查询和修改。
一、写法:
字面量: /正则/
通过正则的构造函数,生成一个对象: new RegExp(字符串)
eg:
var reg = /412/;
var reg = new RegExp("4121");
二 、方法:
- test()
reg.test(str) //若匹配成功,返回true
//若匹配失败,返回false
//reg:正则表达式 str:源字符串
- match() 字符串方法
返回一个数组,包含着匹配的内容,可以接受字符串,若不成功就返回null
var arr = str.match(reg)
var arr = str.match("x") //在str中查找“x”
可以通过Array.isArray(arr)
来验证是一个数组。
数组中参数如下:
arr[0] //返回的内容
arr.index //匹配成功的字母在源字符串中的下标
arr.input //母字符串
当没有全局寻找时(没有g),有index ,input
当对全局寻找时(存在g),没有index,input.
举例:
按照不同字母查找
var str ="aabbbcccccc";
var reg =/(\w)\1+/g;
console.log(str.match(reg) ); //["aa", "bbb", "cccccc"]
- replace() 字符串方法
用于替换。接受两个参数。
第一个参数:可以是正则 / 字符串
第二个参数: 可以是正则 / 函数(函数必须有返回值,用于替换)
str.replace(reg,"XXX");
str.replace("YYY","XXX");
str.replace(reg,function(a,b,c,d){return XXX})
若无子集,则形参(三个)意义如下:
a:匹配成功的内容
b:序号,下标值
c:原字符串
若有n个子集,则形参(N+3个)意义如下:
a:匹配成功的内容
b:第一个子集(若有多的子集往后顺延,即第三个参数是第二个子集)
c:序号,下标值
d:原字符串
经典用法:
前后颠倒
var str ="jianglin 蒋林";
var reg =/(\w+)\s(蒋林)/g;
console.log(str.replace(reg,"$2 $1")); //蒋林 jianglin
$1 代表第一个子集,$2 代表第二个子集
三、元字符(特殊字符)
\n:换行
\t:空格
\d:数字
\D:非数字
\s:空格
\S: 非空格
\w: 字符(大小字母,数字,下划线)
\W: 非字符
\b : 单词边界,起始,开始,连词符(除了\w以外的范围)
\B: 非独立部分
. :匹配任何元素(不包括\n,\r)
四、量词(只管辖前一个整体)
{0,5} //最少出现0次,最多出现5次
{0,} * //最多无限次数
{0,1} ? //可有可无
{1,} + //最少出现一次
五 、标识符(写在两个反斜杠的最后面)
g //global 全局(从头到尾的匹配)
i //ignore case 不区分大小写
m //multiline 换行匹配
多个使用时,不关心前后顺序。
/\d+/gi
等价于/\d+/ig
六、起始 结束符
^ //行首 /^a/ 匹配以a开头的字符串
$ //行尾 /a$/ 匹配以a结束的字符串
七 、贪婪/非贪婪模式
存在两量词时
贪婪模式:从最高次开始匹配。
reg = /a{0,3}/gi
非贪婪模式:从最低次开始匹配。
reg = /a{0,3}?/gi
八 、子集(作为一个整体)
reg = /(ab){0,3}/gi
九、范围词(里面的字符都是或者的关系)
[0-9] [A-Z] [a-z]
支持组合:
[A-Za-z] //所有字母
十 、匹配汉字
reg = /[\u4e00-\u9fa5]/g
十一 、 取反
[^]
eg:[^1] //非1
必须在中括号之间。
常用写法
tel:/^1[3-9]\d{9}$/
qq:/^[1-9]\d{4,10}$/
id:/^[1-9]\d{16}[\dx]$/
url:/^(http|https):\/\/[\w|\.]*$/
email:/^[1-9A-Za-z]\w{5,19}@[1-9a-z]{2.7}\.[a-z{2.5}]$/
user:/^[1-9A-Za-z_]\w{5,9]$/
pad:/^[\w!@#$%^&*()_+\-\{\}=\[\]{6,20}$/