JavaScript正则表达式

1.正则表示式的语法
如果方法是test和exec,则相应的格式为模式.test(字符串)或者是模式.exec(字符串)。
如果方法是match,replace和search时,则相应的格式为字符串.match(模式)
exec 一个在字符串中执行查找匹配的RegExp方法,它返回一个数组(未匹配到则返回null)。
test 一个在字符串中测试是否匹配的RegExp方法,它返回true或false。
match 一个在字符串中执行查找匹配的String方法,它返回一个数组或者在未匹配到时返回null。
search 一个在字符串中测试匹配的String方法,它返回匹配到的位置索引,或者在失败时返回-1。
replace 一个在字符串中执行查找匹配的String方法,并且使用替换字符串替换掉匹配到的子字符串。
/正则表达式主体/修饰符(可选)
实例:var patt=/runoob/i
/runoob/i是一个正则表达式
runoob是一个正则表达式主体(用于检索)
i是一个修饰符(搜索不区分大小写)
2.使用字符串方法
在JavaScript中,正则表达式通常用于两个字符串方法search()和replace()
search()方法用于检索字符串中指定的子字符串,或检索与正则表达式相匹配的子字符串,并返回子串的起始位置。
replace()方法 用于在字符串中用一些字符替换另一些字符,或替换一个与正则表达式匹配的子串

var str="Visit Runoob";
var n=str.search(/Runoob/i);//返回6
//使用字符串
var str="Visit Runoob!"
var n=str.search("Runoob")//返回6
//replace()方法使用正则表达式
var txt=str.replace(/Microsoft/i,"Runoob");
var txt=str.replace("Microsoft","Runoob");

在这里插入图片描述
3.正则表示式模式
在这里插入图片描述
使用test()
test()方法是一个正则表达式方法
test()方法用于检测一个字符串是否匹配某个模式,如果字符串中含有匹配的文本,则返回true;否则返回fasle;

var patt=/e/;
patt.test("the best")//返回true

使用exec()
exec()方法是一个正则表达式方法
exec()方法用于检索字符串中的正则表达式的匹配
该函数返回一个数组,其中存放匹配的结果。如果未找到匹配,则返回值为null
该方法是专门为捕获组而设计的,其接受一个参数,即要应用模式的字符串,然后返回包含第一个匹配项信息的数组;或者在没有匹配项的情况下返回null。返回的数组虽然是Array的实例,但是包含两个额外的属性:index和input。其中index表示匹配项在字符串中的位置,而input表示应用字符串表达式的字符串。

var text = "mom and dad and baby";
var pattern = /mom( and dad( and baby)?)?/gi;
var matches = pattern.exec(text);
console.log(matches.index); //0
console.log(matches.input); //mom and dad and baby
console.log(matches[0]);    //mom and dad and baby
console.log(matches[1]);    //and dad and baby
console.log(matches[2]);    //and baby

对于exec()方法而言,即使在模式中设置了全局标志g,它每次也只是返回一个匹配项。在不设置全局标志的情况下,在同一个字符串上多次调用exec()方法将始终返回第一个匹配项的信息。而在设置全局标志的情况下,每次调用exec()则都会在字符串中继续查找新匹配项,如下例子:

var text = "cat, bat, sat, fat";
var pattern1 = /.at/;

var matches = pattern1.exec(text);
console.log(matches.index); //0
console.log(matches[0]);  //cat
console.log(pattern1.lastIndex); //0

matches = pattern1.exec(text);
console.log(matches.index); //0
console.log(matches[0]);  //cat
console.log(pattern1.lastIndex); //0

var pattern2 = /.at/g;

var matches = pattern2.exec(text);
console.log(matches.index); //0
console.log(matches[0]);  //cat
console.log(pattern2.lastIndex); //3

var matches = pattern2.exec(text);
console.log(matches.index); //5
console.log(matches[0]);  //bat
console.log(pattern2.lastIndex); //8
/e/.exec("The best things in life are free!");

使用match()
“186a619b28”.match(/\d+/g); // [“186”,“619”,“28”]
如果上面的匹配不是全局匹配,那么得到的结果如下:
[“186”, index: 0, input: “186a619b28”]
使用RegExp对象
它接收两个参数:一个是要匹配的字符串模式,另一个是可选的标志字符串。可以使用字面量定义的任何表达式,都可以使用构造函数来定义,还是以上面的例子为例:
var pattern = new RegExp("[bc]at",“i”);
注意:RegExp构造函数模式参数时字符串,所以再某些情况下要对字符进项双重转义。所有元字符都必须双重转义,如字面量模式为/[bc]at/,那么等价的字符串为"/\[bc\]at/"
4.常用的正则字符
在这里插入图片描述在这里插入图片描述
在这里插入图片描述
5.正则表达式表单验证

//是否带有小数
/^\d+\.\d+$/
//检验是否中文名称组成
/^[\u4E00-\u9FA5]{2,4}$/
//检验是否全由8位数字组成
/^[0-9]{8}$/
//检验电话码格式
/^((0[0-9]{3}-\d{7,8})|(1[3584]\d{9}))$/
//检验邮箱地址是否合理
/^\w+@[a-zA-Z0-9]{2,10}(?:\.[a-z]{2,4}){1,3}$/
//分割数字每三个以一个逗号划分
var str="12345678901";
function numSplit(str){
    var re=/(\d)(?=(\d{3})+$)/g;
    return str.replace(re,'$1,');
    //$1获取符合条件的(\d),而这个$1就是代表(\d)
}
var str="123456789"
var reg=/(^\d{3})(\d{3})(\d{3}$)/
console.log(str.replace(reg,"$1,$2,$3"))//123,456,789
//匹配IP地址
var str="255.221.221.12";
//[01]?\d\d?表示匹配小于199的数,可以说两位数或一位数,2[0-4]\d表示从200到249,配合25[0-5]就表示小于255的数了。
var reg=/(([01]?\d\d?|2[0-4]\d|25[0-5])\.){3}([01]?\d\d?|2[0-4]\d|25[0-5])$/g;
console.log(str.match(reg))
//匹配一年中的12个月
var str="12";
var reg=/^(0?[1-9]|1[0-2])$/g
//给一个连字符串例:get-element-by-id转化成驼峰形式
var str="get-element-by-id";
var reg=/-\w/g;
console.log(str.replace(reg,function(s){
     return s.slice(1).toUpperCase();
}))

在这里插入图片描述
5.[],{},()的区别
[]:定义匹配的字符范围。
{}:一般是用来匹配的长度
():为了提取匹配字符串
6
x(?=y) 配’x’仅仅当’x’后面跟着’y’.这种叫做正向肯定查找。即是匹配的x
x(?!y) 匹配’x’仅仅当’x’后面不跟着’y’,这个叫做正向否定查找。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值