zoukankan      html  css  js  c++  java
  • javascript和php中的正则

    正则:

    var subStr=str.replace(reg/str,'');   不改变原来的字符串返回替换后的字符窜; 如果不用正则,只能替换第一个匹配到的;


    var subStr=str.match(reg);   返回匹配到的字符串;如果不指定全局匹配,只match第一个出现的字符,一般和正则配合使用;


    var bool=reg.test(str);===>检测str里面有没有出现符合正则的部分,

    varint=str.search(reg/str);返回要查找的reg/str第一次出现的位置,没找到返回-1;  在大字符串中找小字符串;可以和则配合使用,但全局匹配不起作用,因为只返回第一次匹配到的字符的位置;


    var subStr=str.charAt(int)  返回指定位置的一个字符;


    var subStr=str.sbustring(start,[end]); 不包括end位;

    var subStr=str.substr(start,length);


    var arr=str.split('分隔符');  默认是逗号;


    兼容正则的string 函数;

    ****兼容正则的str函数和正则配合使用最主要的是可以用正则的模糊匹配和全局匹配,如果只是查找单个确定的字符串,就没必要用到正则;


    1  str.split(preg)  ====>以正则表达式匹配的内容将str分隔成数组;注意,如果有子表达式,除了以整体正则分隔,还会以子表达式分隔,用split函数时正则最好不要带字表达式;

    测试代码:


    var str='aabbccddaabbccdd';

    var preg=/aa/g;

    var res=str.split(preg);

    // alert(res.constructor);  //function Array;


    2str.match(preg)  ==>返回一个数组;

    测试代码:


    var str='aabbccddaabbccdd';

    var preg=/aa/g;

    var a=str.match(preg);

     //alert(a.constructor);  //function Array;

     //alert(a.length);  //2;

     //alert(a);   //aa,aa


    3 str.search 


    var str='aabbccddaabbccdd';

    var preg=/aa/g;

    var res=str.search(preg);

    //alert(res.constructor);   //function Number; 全局匹配不起作用;

    // alert(res);   //0  返回第一次匹配到的位置没找到返回-1;


    4str.replace;


    var str='aabbccddaabbccdd';

    var preg=/aa/g;

    var res=str.replace( preg,'*' );

    alert(res);    //*bbccdd*bbccdd;

    //查找aabbcc并把其中的bb替换成*

    var res1=str.replace( preg,'$1*$2' );

    alert(res1);    //aa*ccddaa*ccdd;


    正则函数;

    1 test;

    var bool=preg.test(str)   ;

    2exec

    preg.exec(str);  //js最强大的正则函数;

    demo:

    var str='aabbccddaabbccdd';

    var preg=/aa(bb)/g;

    var res=preg.exec(str);

    // alert(res);  //aabb,aa;  //返回的是一个数组,这个数组的 res[0]是正则匹配的整体,其后依次是匹配的子表达式; 当对字符串进行模糊匹配时,通过返回的结果能确定到底匹配到了什么;

    //在js中一切都是对象,返回的数组包含两个属性,index和input;

    // alert(res.index); //0   返回偏移量;

    // alert(res.input);  //aabbccddaabbccd返回str;

    //var res=preg.exec(str);

    //var res1=preg.exec(str);

    //alert(res.index);  //0   //这个和php里获取mysql资源的函数mysql_fetch_assoc(res)类似;可以用一个while把全局匹配到的所有信息打印出来;

    //alert(res1.index); //8  

    最后来个重口味的;把所有信息取出来;


    var str='aabbccddaabbccdd';

    var preg=/aa(bb)/g;


    while(res=preg.exec(str)){


    for(key in res){

     

    document.write(key+'='+res[key]+'<br/>');

    }

     

    }

    0=aabb

    1=bb

    index=0

    input=aabbccddaabbccdd

    0=aabb

    1=bb

    index=8

    input=aabbccddaabbccdd


    正则区分大小写;  

    i   忽略大小写;

    js正则对象RegExp,包含一些属性,如匹配模式i m g s等;

    demo  var reg=/ ^s+|s+$ /img;   reg.source   ==返回 ^s+|s+$  

    reg.global  ==>返回true  ==>(因为创建的reg对象指定了全局匹配)

    /^s+|s+$/g  ===>去行首和行尾的空格;

    /^ss$/mg;  ==>匹配空行;


    |   或     注意  : /a|b|c/=/[abc]/;


    方括号 [ ] 的第一种用法的第一种用法==>或者

    第二种用法  [ a-z ]  范围  ==>代表方位内的一个;

    第三种用法  ^放在方括号 [ ^ ]内表示取反;  


    [u4e00-u9fa5] ==>匹配中文;

    要匹配单个中文可以查中文的unicode十六进制编码;

    ^行首

    $行尾


     单词边界   字符窜首尾,或者空格,或者逗号都匹配;

    B单词的非边界

    [^]  除了XXX之外;

    代表任意字符

    +代表{1,N}个和前面一样的字符

    数字 digital

    D [^0-9]  与d相反

    w  [0-9a-zA-Z_]  word

    W[^0-9a-zA-Z_]     注意/[a-zA-Z_]/==/[a-z]/ig;

    s  space

    S  除了空格外的字符;

    S   大S   匹配所有非空字符


    { n,m }

    {n,}

    {,m}

    {n}

    {1,}  ==>+

    {0,} ==>*

    {0,1}==>出现0次或者一次


    多行模式  m  (把大字符串的每一行都当做一个开始和结束,如果不用多行模式,正个大字符串无论有多少行都只有一个开头和一个结尾); 

    题:

    把每行的结尾的字符换成#;


    单行模式(在php中如果把正则匹配模式设为单行模式即s模式,那么(点).元字符就会代表任意字符,包括换行符在内;)--用途,如果要匹配的字符中间出现换行符,点元字符就不能被匹配,导致匹配不到结果.

    在js中不支持单行模式可以用一对反义字符  代替单行模式;


    预查(断言)==>预查字符不放入结果,


    向后预查(断言)(预先判断前面的值是否为制定值)语法==>(?=xxx);

    或者(预先判断前面的值是否不为制定值) 语法==> (?!xxx);



    1//查找 一 ing结尾的词的词根  /w+?(?=ing)/ig;  //单词本身含有ing但返回的结果是去掉了ing后的部分;

    var preg=/win(?=xp)xp/; //要包含预差部分,还要在预查后面加上预查内容;


    2//查找出以win开头且不是win95单词;

    var str='winxp winstart win95 win2003';

    var preg=/win(?!95)w+?/ig;

     

    var str1=str.match(preg);

    alert(str1);  //winxp winstart win2003


    3//找出以un开头的词的词根:

    var str='unhappy unknown happy undo';

    var preg=/(?=un)w+?/gi;

    var str1=str.match(preg);

    alert(str1);  // happy known do


    向前预查(断言):(js暂时不支持)  php(支持);

     

    反向引用子表达式:

     (?:pattern) 匹配pattern 但不获取匹配结果,也就是说这是一个非获取匹配不进行存储供以后使用;

    在正则表达式内部用1,23…….. 引用;

    在正则表达式外部用(用正则函数和兼容正则的函数时)用$1,$2,…..$n引用;


    完美版getByClass

    function getByClass(oParent,ClassName){

    var aEle=oParent.getElementsByTgeName('*');

    var aResult=[];

    var reg=/+className+/

    var i=0;

    for(i; i<aEle.length;i++){

    if( reg.test(aEle[i].className) ){

    aResult.push(aEle[i]);

    }

    }

    return aResult;

    }






    php中的正则php的正则语法和js几乎一致;只是使用的正则函数不同


    //php正则函数;

    对数组进行正则替换;

    1:array preg_grep ( string $pattern , array $input [, int $flags = 0 ] );

    第三个可选参数$flag只有一个值PREG_GREP_INVERT,如果指定,则返回没有被匹配到的数组元素(即取反);


    正则匹配;

    2 int preg_match ( string $pattern , string $subject [, array &$matches ] )

    第三个可选参数保存了匹配到的字符串(一维数组),后面两个参数最好不要用,如果用了第4个可选参数,会导致数组位数的增加;

    返回值,匹配成功返回1,没匹配到返回0;


    3int preg_match_all ( string $pattern , string $subject [, array &$matches ]);


    参数和用法和preg_match()一样;

    返回值,匹配到了返回匹配到的次数;没匹配到返回0;


    4正则替换;

    mixed preg_replace ( mixed $pattern , mixed $replacement , mixed $subject [, int $limit = -1 )

    此函数默认(-1)是全局替换,如果不希望全部替换,第四个可选参数可以指定替换的次数;


    5正则切分

    array preg_split ( string $pattern , string $subject [, int $limit = -1 ]);

    此函数返回一个数组,第四个可选参数指定希望返回的数组的最大的长度(通过这个参数可以对字符串进行不王全切分);


    6特殊字符转义;

    string preg_quote ( string $str [, string $delimiter = NULL ] );

    此函数会对传入的$strcan参数里面的在真中又特殊含义的特殊字符进行加反斜杠转义,第二个可选参数可以额外指定一个被转义的任意字符;  此函数和前面几个正则函数配合使用才能发挥更大的威力;

    demo1:

    $keywords = '$40 for a g3/400';

    $keywords = preg_quote($keywords, '/');

    echo $keywords; // returns $40 for a g3/400


    demo2:

    $textbody = "This book is *very* difficult to find.";

    $word = "*very*";

    $textbody = preg_replace ("/" . preg_quote($word) . "/",

                              "<i>" . $word . "</i>",

                              $textbody);


  • 相关阅读:
    linq 查询 过滤数据中某个值是否在数组中
    Nginx 摘要
    Unity调用外部摄像头,全屏显示摄像头画面
    Vuforia切换回识别场景后黑屏解决
    Unity3d通过脚本生成apk
    EF6 CodeFirst连接MySql 报nvarchar('max')错误解决办法
    UNITY_MATRIX_MVP和UnityObjectToClipPos
    Unity的stateMachineBehaviour
    U3D加载服务器上的assetbundle
    jquery解析xml,获取xml标签名
  • 原文地址:https://www.cnblogs.com/fuhaots2009/p/3476608.html
Copyright © 2011-2022 走看看