32、正则表达式

来源:互联网 发布:java 字符串排序函数 编辑:程序博客网 时间:2024/06/08 14:17

正则表达式(regular expression)

其实就是代表一种 给计算机去看的规则   

描述了一种字符串匹配的模式,可以用来检查一个串是否含有某种子串、将匹配的子串做替换或者从某个串中取出符合某个条件的子串等。 // reg.test( str ) 如果满足规则,返回true,否则返回false

 // 正则里面的特殊字符 \ / { } + . ? * ( ) [ ] ^ $ 

 

1、写法与用法:   

    写法1:var reg = /qwe/;

    写法2:var reg1 = new RegExp('qwe');

    用法1:.test();
                       正则.test( 字符串 )
                       匹配成功 返回true  否则 返回false

    用法2:match();
                        字符串.match( 正则 );
                       匹配成功 返回匹配结果的数组
                        匹配不成功 null;

    用法3:search()
                       字符串.search( 正则 );
                       匹配成功 返回字符所在位置
                       匹配不成功  返回-1

    用法4:replace
                     字符串.replace(正则 , 参数); 把匹配成功的东西替换成字符串;
                     参数 : 可以是一个字符串,也可以是一个匿名并且带return的函数

                     当是函数的时候:可以接收形参,return 什么 替换成什么
                     function( 匹配整体 , 第一个子项 , 第二个子项  ,  ){//其中的 匹配整体 , 第一个子项 , 第二个子项  , ……  名可以随意名,符合规则就行
                                          return xxxx;
                     }/*具体应用见第9*/

例子:

         var str = 'abdcef';
          var reg1 = /abc/;
          if( reg1.test( str ) ) {
                   alert( '匹配成功' );
          }else{
                   alert( '匹配失败' )
          };//验证字符串中str中是否有qwe这个字符串;也可验证中文


         var str = 'dsgud3456jgfuyj789';
         var a = /\d+/g;
         var arr = str.match( a );
         alert( arr );


         var str = '4afei6afei4dfiafei54dnfi';
         var r = /afei/g;/*g不管用,一旦找到就立即返回*/
         var a = str.search( r );
         alert( a )


2、 转义 \

/*
    \s  空格
    \S  非空格
    \d  数字
    \D  非数字
    \w  字符(字母 数字 _)
    \W  非字符
    \b  独立部分(空格 开始 结束 -)
    \B  非独立部分
    \跟上特殊意义的字符

*/

注意var reg = new RegExp('\\d+',"g");  采用这种写法的时候转义字符加两个\   ,g和i要写在后面

       例如:var reg = /\//; //验证指定字符串是否有/,不能写成var reg = /\/;  转义\是将其后的有意义的字符转为无意义的字符,例如var a='\';此处''为一个字符串的起止符,由于中间添加了一个转义\,所以其后的'有意义的'被转成了无意义的',所以此该字符串赋值表达式后没有结束符了。需要验证字符串中是否存在有其他特殊意义的字符的时候,都需要加上转义\。


3、量词:{}

/*
  {1,5} :  1 <= n <= 5

  {2,}  :  n >= 2  

  {1,} :   n >= 1

  {+}:  n >= 1

  {0,} :  n >= 0

  {*} :  n >= 0

  {0,1} : ?  :  0 <= n <= 1

  {?} :  0 <= n <= 1
*/

// match :  str.match( reg );  满足匹配规则,把匹配成功的内容放到一个数组里面,返回数组,否则返回null,

例子:
    var reg = /w+q/;//匹配字符串中是否有n个w加上一个q的字符串
    var str = 'wwwwq';
    var arr = str.match( reg );
    alert( arr );//弹出wwwwq

    var reg = /w{2,3}/;
    var str = 'wwwwq';
    var arr = str.match( reg );
    alert( arr );//弹出wwwq  //最前方的一个w自动丢弃


4、标识

写在正则表达式之后

g   :   全局匹配 (从头到尾匹配完)
i   :   不区分大小写 ,平时不带i代表默认区分大小写


例如:

var reg = /w+/g;
var str = 'Wqwwqwwwqwwww';
var arr = str.match( reg );
alert( arr );//弹出ww,www,wwww

var reg = /w+/ig;
var str = 'Wqwwqwwwqwwww';
var arr = str.match( reg );
alert( arr );//弹出W,ww,www,wwww


5、子集: ()

当有子项,并且没有全局标识g的时候,match返回的数组的第二项代表子集内容

var reg = /(qw)+(ss)/; //匹配子项1 (qw) 匹配子项2 (ss)
var str = 'qwqwssqqwsqwqwqw';
var arr = str.match( reg );
alert( arr );//弹出qwqwss,qw,ss

6、字符集: [ ] (简称匹配某一位)

[0-9]  : 从0到9中的其中任意一个数字

[a-z]  :  a - z中的其中任意一个字母

[A-Z]  :  A - Z中的其中任意一个字母

备注:不可以倒序,例如[5-1],[f-a];

           字符集里面的( 除了\)的其他特殊字符都不特殊,是单纯的没有意义的字符,跟其他字母数字一样


[1-5]  :  从1到5中的任意一个数字

[F-K]  :  F - K中的其中任意一个字母

[FK] : F或者K  

[ew0-9] : e或者w或者数字0-9


例如:

var reg = /[1-5]/g;
var str = 'we23w4';
var arr = str.match( reg );
alert(  arr  );//弹出2,3,4


var reg = /[a-z]/g;
var str = 'we23w4';
var arr = str.match( reg );
alert(  arr  );//弹出w,e,w


var reg = /[we]/g;
var str = 'we23w4';
var arr = str.match( reg );
alert(  arr  );//弹出w,e,w


var reg = /[ew0-9]/g;
var str = 'we23w4';
var arr = str.match( reg );
alert(  arr  );//弹出w,e,2,3,w,4


var reg = /[e(}w0-9]/g;
var str = 'we23}w4(';
var arr = str.match( reg );
alert(  arr  );//弹出w,e,2,3,},w,4,(



7、其他小知识点综合:

.   任意字符都行
^   开始   在字符集[]里面使用是  非
$   结束



var reg = /^q/;
var str = 'q.qw';
var arr = str.match( reg );
alert( arr );//弹出.


8、或者

|
var reg = /阿飞|恋雪/;
var str = '阿飞童鞋';
alert( str.match( reg ) );//弹出阿飞

var reg = /阿飞(老师|童鞋)/;
var str = '阿飞童鞋';
alert( str.match( reg ) );//弹出阿飞童鞋,童鞋


9、replace

str.replace( reg , strA ); 把匹配成功的东西替换成strA;
/*
strA : 可以是一个字符串,也可以是一个匿名并且带return的函数

当是函数的时候:
可以接收形参
return 什么 替换成什么


function( 匹配整体 , 第一个子项 , 第二个子项  , …… ){//其中的 匹配整体 , 第一个子项 , 第二个子项  , ……  名可以随意名,符合规则就行
return xxxx;
}
*/


var reg = /qqw/;
var str = 'werqqwwer';
var a = str.replace( reg,"aaa"); 
alert(a);//弹出weraaaer


var str = 'werqqwwer';
var reg = /qqw/;
var a = str.replace(reg,function(){
return '123';
});
alert( a );//弹出wer123wer


var str = 'werqqw2wer';
var reg = /qq(w)(2)/;
var wangdachui = 'wan';
var a = str.replace(reg,function(wangdachui ,ligoudan,hehe){
console.log(wangdachui);//qqw2
console.log(ligoudan);//w
console.log(hehe);//2
return 12345;
});
alert( a );//弹出wer123wer


屏蔽关键词:

<!DOCTYPE HTML><html><head><title>please enter your title</title><meta charset="utf-8"><meta name="Author" content=""><style type='text/css'>*{ margin:0; padding:0;}</style></head><body><script type="text/javascript">var str = '你妈的你个垃    圾';var reg = /傻.*逼|垃.*圾|S.*B|他.*妈.*的|你.*妈.*的|shabi/gi;var newStr = str.replace( reg , function( $0 ){var str = '';for (var i=0;i<$0.length;i++ ){str += '*';}return str;});alert( newStr );</script></body></html>



小案例:

<!DOCTYPE HTML><html><head><title>please enter your title</title><meta charset="utf-8"><meta name="Author" content=""><style type='text/css'>*{ margin:0; padding:0;}</style></head><body><input type="text" id='txt' placeholder='请输入您的邮箱' /><script type="text/javascript">var oTxt = document.getElementById('txt');/*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]$/;oTxt.onblur = function(){var val = this.value;if ( val.length ){if ( regMail.test( val ) ){alert( 'OK' )}else{alert( '您输入的邮箱不满足要求' );}}}</script></body></html>


0 0
原创粉丝点击