正则表达式详谈及实例

    xiaoxiao2021-03-25  197

    正则表达式都是用来操作字符串的。

    g:全局匹配。i:不区分大小写。m:表示多行匹配

    写法:

    var re=/ /;斜杠后面可加上 三种字母:g、i、m。

    var re=new RegExp();括号里面放两个参数,一个是斜杠加里面的匹配表达式,第二个是匹配方式,即g,i,m(可不写)。

    正则的四种方法

    1、test:字符串的判断(匹配成功返回真,失败返回假)

    写法:re.test(str);

    例如:var re=/ab/;

    alert(re.test('abc'));  //true

    alert(re.test('acb'));  //false

    2、searth:字符串的搜索(匹配成功返回成功的位置,失败返回-1)

    写法:str.searth(re);

    例如:var str="abcdefghi";

    var re1=/d/;

    var re2=/p/;

    alert(str.searth(re1));  //3

    alert( (str.searth(re2));  //-1

    3、match:获取匹配的结果(匹配成功返回成功的数组,失败返回null)

    写法:str.marth(re);

    例如:var str="ab12cd3444efg66hi";

    var re=/\d+/g;

    alert((str.searth(re));  //[12,3444,66]

    4、replace:替换所有匹配(匹配成功的字符被替换成新的字符)

    写法:str.replace(re,‘’);第二个参数可以是字符串也可以是回调函数

    回调函数中的第一个参数:匹配到的字符

    第二个参数:匹配到的字符里面第一个括号里的字符

    第三个参数:匹配到的字符里面第二个括号里的字符。

    以此类推。。。

    (例子会结合小括号一起解析)

    小括号的作用:分组并且储存以备后用

    例如:将字符串中的(-)替换成(.)。

    var str='2017-03-10';

    var re=/(\d+)(-)/g;

    str.replace(re,function($0,$1,$2){

         $0=$1+'.';

    retrun $0;

    });

    重复子项

    \1:重复第一个子项。\n重复第n个子项(比较适用于要重复的字符为不定项的时候)

    例如:

    var str='a3ab22bcc';

    var re=/([a-z])([0-9])\1/;

    var re1=/([a-z])([0-9])\2/;

    alert(str.replace(re,'A'));  //Ab22bcc

    alert(str.replace(re1,'A'));  //a3aAbcc

    例如:

    中括号的作用:匹配括号里的任意字符,但括号整体代表一个字符。

    例如:var re=/a[a-d]b/;

    alert(re.test('acb'));  //true

    alert(re.test('abcb'));  //false

    常用转义字符

    \d:数字字符。

    \D:非数字字符。

    \w任意字符(字符、数字、下划线)

    \W 非字符数字下划线

    \s :空格符

    \S:非空格

    \b:独立单词分界(起始、结尾、空格)

    \B:非独立单词

    量词

    {m,n}出现m到n次

    {m,}至少出现m次

    {m}正好出现m次

    +:{1,}至少出现0次

    ?:{0,1}出现1次或不出现

    *:{0,}至少出现0次

    ^:出现在中括号里面则表达[非]的含义,出现在中括号外面,则表示以后面字符串作为开头的匹配。

    $:放在正则的结尾表示以最后一个字符结尾的匹配

    常用正则表达式

     re=/^[a-zA-Z\u4e00-\u9fa5]+$/;  // 验证姓名,汉字和字母  re1=/^(?![0-9]+$)(?![a-zA-Z]+$)[0-9A-Za-z]{8,16}$/;    // 验证密码,8-16位字母或数字,不能全为数字或字母  re3= /^\w+([-+.]\w+)*@\w+([-.]\\w+)*\.\w+([-.]\w+)*$/;   // 验证邮箱  re4=/^1[3|4|5|8][0-9]\d{4,8}$/;            // 验证手机号码

    思考题及解析:

    找出 str=”aassddffooohhgygjjooonbmcxooo“中个数最多的字符

    var str=”aassddffooohhgygjjooonbmcxooo“;

    var arr=str.split();

    str=arr.sort().join();

    var value='';

    var index=0;

    str.replace(re,function($0,$1){

    if(index<$0.length){

    index=$0.length;

    value=$1;

    }

    alert(value+':'+index);

    });

    转载请注明原文地址: https://ju.6miu.com/read-1744.html

    最新回复(0)