正则表达式总结

2 篇文章 0 订阅

正则表达式:描述了一种字符串匹配的模式,可以用来检验一个串是否含有某种子串、将匹配的子串做替换或者从某个串中取出符合某个条件的子串等。

 

形式:var re=new RegExp”a”,gi;或者

      Var re=/a/ig;简写方法 推荐使用 性能更好  不能为空 不然以为是注释

 

元字符

代表特殊含义的元字符

\d : 0-9之间的任意一个数字  \d只占一个位置
\w : 数字,字母 ,下划线 0-9 a-z A-Z _
\s : 空格或者空白等
\D : 除了\d
\W : 除了\w
\S : 除了\s
 . : 除了\n之外的任意一个字符
 \ : 转义字符
 | : 或者
() : 分组
\n : 匹配换行符
\b : 匹配边界 字符串的开头和结尾 空格的两边都是边界 => 不占用字符串位数
 ^ : 限定开始位置 => 本身不占位置
 $ : 限定结束位置 => 本身不占位置
[a-z] : 任意字母 []中的表示任意一个都可以
[^a-z] : 非字母 []中^代表除了
[abc] : abc三个字母中的任何一个 [^abc]除了这三个字母中的任何一个字符

():,小括号,叫做分组符

var str = '2013-6-7';
var re1 = /\d-+/g;  //
全局匹配数字,横杠,横杠数量至少为1,匹配结果为:  3- 6-
var re1 = /(\d-
+/g;  // 全局匹配数字,横杠,数字和横杠整体数量至少为1   3-6-
var re2  = /(\d+)(-)/g;   // 
全局匹配至少一个数字,匹配一个横杠 匹配结果:2013- 6-

同时,正则中的每一个带小括号的项,都叫做这个正则的子项。子项在某些时候非常的有用,比如我们来看一个栗子。

例子:让2013-6-7 变成 2013.6.7

复制代码代码如下:


var str = '2013-6-7';
var re = /(\d+)(-)/g;
str = str.replace(re,function($0,$1,$2){
    
       //replace()
中如果有子项,
      //第一个参数:$0(匹配成功后的整体结果  2013-  6-,
         //
第二个参数 : $1(匹配成功的第一个分组,这里指的是\d   2013, 6)
        //
第三个参数 : $2(匹配成功的第二个分组,这里指的是 - - )   
    return $1 + '.';  //
分别返回2013.   6.
    
});
alert( str );   //2013.6.7
//
整个过程就是利用子项把2013- 6- 分别替换成了2013. 6.  最终弹出2013.6.7

 

量词:代表出现的次数

{n,m}:至少出现n次,最多m

{n,} :至少n

* :任意次 相当于{0,}

:零次或一次 相当于{0,1}

+ :一次或任意次相当于 {1,}

{n} 正好n

 

\b : 独立的部分 起始,结束,空格

\B : 非独立的部分

[] 表示某个集合中的任意一个,比如 [abc] 整体代表一个字符 匹配 a b c 中的任意一个,也可以是范围,[0-9] 范围必须从小到大

[^a] 整体代表一个字符   ^写在[]里面的话,就代表排除的意思

 

常用方法:

  1. test():在字符串中查找符合正则的内容,查到返回true,反之返回false

用法:正则.test(字符串)

例子: 判断是否为数字:

var str = '374829348791';

var re = /\D/; // \D代表非数字

if( re.test(str) ){ // 返回true,代表在字符串中找到了非数字。

 alert('不全是数字');

}else{

 alert('全是数字');

}

 

  1. exec():返回包含第一个匹配项的数组,没有匹配项则返回null

用法:re.exec(str)

返回的数组有两个属性:index和input index表示匹配项在字符串中的位置,input表示应用正则表达式的字符串

注:设置全局标志g,exec每次也只返回一个匹配项;如不设置全局标志g,同一字符串每次返回第一个匹配项的信息,设置之后,每次调用会查找新匹配项

例子:

Var text=“cat,bat ,sat,fat”;

Var re=/.at/;

Var m=re.exec(test);

Consol.log(m.index);//0

Console.log(m[0]);//cat

Console.log(re.lastIndex);//0

//再调用一次

m=re.exec(test);

Consol.log(m.index);//0

Console.log(m[0]);//cat

Console.log(re.lastIndex);//0

 

Var re1=/.at/g;

Var m=re1.exec(test);

Consol.log(m.index);//0

Console.log(m[0]);//cat

Console.log(re1.lastIndex);//3

//再调用一次

m=re1.exec(test);

Consol.log(m.index);//5

Console.log(m[0]);//bat

Console.log(re1.lastIndex);//8

 

  1. match():在字符串中搜索符合规则的内容,搜索成功就返回内容,格式为数组,失败就返回mull ,与exec()类似。

与exec()不同点:

  1. 用法: str.match(re)
  2. 一旦设置全局标志g,则match会将所有匹配项返回在一个数组里

 

4. replace():查找符合正则的字符串,替换成对应的字符串,返回替换后的内容

 用法:str.replace(re,新的字符串/回调函数) (在回调函数中,第一个参数指的是每次匹配成功的字符)

例子:敏感词过滤,比如 我爱北京天安门,天安门上太阳升。------我爱*********上太阳升。即北京和天安门变成*号,

一开始我们可能会想到这样的方法:

?

1

2

3

4

var str = "我爱北京天安门,天安门上太阳升。";

var re = /北京|天安门/g; // 找到北京 或者天安门 全局匹配

var str2 = str.replace(re,'*');

alert(str2) //我爱**,*上太阳升

 

//这种只是把找到的变成了一个*,并不能几个字就对应几个*。

要想实现几个字对应几个*,我们可以用回调函数实现:

复制代码代码如下:


var str = "我爱北京天安门,天安门上太阳升。";
var re = /
北京|天安门/g;  //  找到北京 或者天安门 全局匹配
var str2 = str.replace(re,function(str){
              alert(str); //
用来测试:函数的第一个参数代表每次搜索到的符合正则的字符,所以第一次str指的是北京 第二次str是天安门 第三次str是天安门
            var result = '';
            for(var i=0;i<str.length;i++){
                result += '*';
            }              
            return result; //
所以搜索到了几个字就返回几个
        });
alert(str2)  //
我爱********上太阳升         
//
整个过程就是,找到北京,替换成了两个*,找到天安门替换成了3*,找到天安门替换成3*

 

5.search():在字符串中搜索符合正则的内容,搜索到就返回出现的位置(有多个则返回第一个匹配项的位置),搜索失败则返回-1

用法:str.search(re)

例子:在字符串中找字母b,且不区分大小写

Var str=’abcdef’;

Var re=/B/I;

Console.log(str.search(re));//1

 

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值