一、如何写正则表达式与测试
var reg = /qwe/; //匹配的内容,无参时
var reg1 = new RegExp('qwe') //上面两句是正则表达式的写法,两句相等。这句是匹配时,正则有参数的时候适用
var str = 'qwedddsssqwe'; //匹配的对象
// test(); reg.test( str ) 如果满足规则,返回true,否则返回false
alert( reg.test( str ) ); //如果str中有qwe则返回ture(qwe必须是连着的);
二、转义
\s 空格
\S 非空格
\d 数字
\D 非数字
\w 字符(字母 数字 _)
\W 非字符
\b 独立部分(空格 开始 结束 -)
\B 非独立部分
\跟上特殊意义的字符,可把有意义的字符变成没有意义的
var reg = /\d/; // \d 所有单个数字
var str = 'a1a';
alert( str );
alert( reg.test( str ) );
结果是弹出1
三、量词:{}
{1,5} : 1 <= n <= 5
{2,} : n >= 2
{1,} : + : n >= 1
{0,} : * : n >= 0
{0,1} : ? : 0 <= n <= 1
var reg = /w+q/;
var str = 'wwwwq';
// match : str.match( reg ); 满足匹配规则,把匹配成功的内容放到一个数组里面返回数组,否则返回null
var arr = str.match( reg );
alert( arr );
四、标识:
g : 全局匹配 (从头到尾匹配完)
i : 不区分大小写
var reg = /w+/ig;
var str = 'Wqwwqwwwqwwww';
var arr = str.match( reg );
alert( arr );
// 结果是:w,ww,www,wwww
五、子集: ()
当有子项,并且没有全局标识的时候,match返回的数组的第二项代表子集内容
var reg = /(12)+(21)/;
var str = '1221';
var arr = str.match( reg );
alert( arr );
// 结果会是:1221,12,21
// 在匹配正则之前会对全局进行扫描
var reg = /(qw){1,}(21)/; //匹配子项1 (qw) 匹配子项2 (21)
var str = 'qwqwssqqwsqwqwqw';
var arr = str.match( reg );
alert( arr );
// 结果是返回null
var reg = /(qw){1,}(ss)/; //匹配子项1 (qw) 匹配子项2 (ss)
var str = 'qwqwssqqwsqwqwqw';
var arr = str.match( reg );
alert( arr );
// 结果是
[
'qwqwss',
'qw',
'ss',
index: 0,
input: 'qwqwssqqwsqwqwqw',
groups: undefined
]
六、字符集: [ ]
** 字符集里面匹配出来是只能是一个字符**
[0-9] : 从0到9
[a-z] : a - z
[A-Z] : A - Z
[1-5] : 从1到5
[F-K] : F - K
// 字符集里面的 除了\ 其他的特殊字符(),{ }不特殊是单纯的没有意义的字符
七、其他小知识点综合:
. 任意字符(这里是一点)
^ 开始 ,在字符集[]里面使用是 ,非
$ 结束
七、手机号、邮箱、qq、的正则规则
QQ号的规则:
// 只能是数字
// 长度 : 5 10
// 不能以0开头
// 邮箱的规则: 371874535@qq.com jii433@163.cn.com
// 手机号规则
// 11 1 数字
var regQQ = /^[1-9]\d{4,9}$/;
var regMail = /^\w+@[0-9a-zA-Z]{2,}(\.[a-zA-Z]{2,}){1,2}$/;
var regTel = /^1[34578]\d{9}$/;
var regID = /^[1-9]\d{16}[0-9xX]$/;
八,replace方法
| 或者
[]
|
var reg = /阿飞(老师|童鞋)/;
var str = '阿飞童鞋';
alert( str.match( reg ) );
结果是阿飞童鞋
replace str.replace( reg , strA ); 把匹配成功的东西替换成strA;
strA : 可以是一个字符串,也可以是一个匿名并且带return的函数
var reg = /qq(w)/;
var str = 'werqqwwer';
var a = str.replace( reg , function(wangdachui , ligoudan){ //第一个参数是对应reg中的整体,第二给参数是对应的reg中的第一个子集。
return '123'; //把qqw替换成123
});
alert( a );
// 当是函数的时候:
// 可以接收形参
// return 什么 替换成什么
function( 匹配整体 , 第一个子项 , 第二个子项 , …… ){
return xxxx;
}
实际应用
$0 表示匹配到得第一个结果的的位置,也就是再原来字符串中的序列号是多少
var str = '傻逼gagasfasfasfas他妈的';
var reg = /傻.*逼|垃.*圾|S.*B|他.*妈.*的|你.*妈.*的|sha.*bi/ig;
let newStr = str.replace( reg , function(re,$1,$2,offset,source){
console.log(re,$1,$2,offset,source);
var str = '';
for ( var i=0;i<re.length;i++)
{
str += '*';
}
return str;
});
// 以上就把字屏蔽了,.* 的作用就是防止文字中间有空格或者其他东西