zoukankan      html  css  js  c++  java
  • javascript正则表达式(regular expression)


    一种字符串匹配的模式,用来检查一个串是否含有某种子串、
    将匹配的子串替换或者从某个串中取出符合某个条件的子串等。
    注意:在javascript中正则表达式也是一种对象
    1:创建正则表达式
    两种方式:隐式创建(文字量方法)和显示创建(使用构造函数)
    eg:
    文字量方法:var regExp = /pattern/flags;
    将文字量的正则表达式赋值给一个变量,包含在两个斜杠之间的一个或多个字符,在后一个斜杠的后面,可以指定一个或多个选项。
    var regExp1 = /abc/;
    var regExp2 = /abc/gi;
    使用构造函数:var regExp =new RegExp("pattern","flags");
    构造函数RegExp()中有2个参数:
    第一个参数指定正则表达式,这是正则表达式的字符串表示方法.
    第二个参数是可选参数,它指定正则表达式的选项.(同上flags)
    var regExp1 = new RegExp("abc");
    var regExp2 = new RegExp("abc","gi");
    (一)相关的语法
    由普通字符和特殊字符(元字符)组成。
    普通字符包括:数字,大小写字母,下划线等
    特殊字符:() [] {} ^ $ * ? | + .
    普通字符可以直接拿来用,特殊字符是一定要转义。
    1:量词
    ? 出现零次或一次
    * 出现零次或多次(任意次)
    + 出现一次或多次(至少一次)
    {n} 对应n次
    {n,m} 至少出现n次但不超过m次(中间不能有空格)
    {n,} 至少出现n次
    eg:
    /ab*/表示一个字符串有一个a后面跟着零个或若干个b。(a, ab, abbb……)
    /ab+/表示一个字符串有一个a后面跟着一个b或者更多b。 (ab, abbb……)
    /ab?/表示一个字符串有一个a后面跟着零个或者一个b。 (a, ab)
    /a?b+$/表示在字符串的末尾有零个或一个a跟着一个或几个b。(b, ab, abbb……)
    /ab{2}/表示一个字符串有一个a跟着2个b(abb)。
    /ab{2,}/表示一个字符串有一个a跟着至少2个b。(abb, abbb……)
    /ab{3,5}/表示一个字符串有一个a跟着3到5个b。(abbbbb, abbb)
    2:修饰符
    i:表示忽略大小写,就是在字符串匹配的时候不区分大小写
    g:表示全局匹配,即匹配字符串中出现的所有模式
    m:表示进行多行匹配
    3:中文或者
    [u4e00-u9fa5]表示中文集
    | 表示或
    eg:
    /hi|hello/表示一个字符串里有hi或者hello
    /(b|cd)ef/表示bef或cdef
    /(a|b)*c/表示有0个或多个a加上c或者有0个或多个b加上c;
    4:预定义类
    . [^ ] 除了换行和回车之外的任意字符
    d [0-9] 数字字符
    D [^0-9] 非数字字符
    s 空白字符
    S 非空白字符
    w [a-zA-Z_0-9] 单词字符(所有的字母)
    W [^a-zA-Z_0-9] 非单词字符
    eg:
    /a.[0-9]/表示一个字符串有一个a后面跟着一个除了换行和回车之外的任意字符和一个数字;
    /^.{3}$/表示有任意三个字符的字符串(长度为3)
    5:字符串的首尾
    字符串的起始位置我们用^
    eg:
    /^abc/ 判断字符串是否是以abc开始的
    /^The/表示所有以The开始的字符串There,The frfr等
    字符串的结束位置我们用$
    eg:
    /xyz$/ 判断字符串是否是以xyz结尾的
    6:字符集
    (1)简单类
    它是有一一对应的字符组成的集合,通过[]包裹住,来表示这几个字母组成的一个集合
    eg:
    [abc123]表示由abc123六个字符组成的一个集合
    eg:
    /[ab]/表示一个字符串有一个a或b
    (2)范围类
    通过首位字母末尾字母以及-组成的一个范围集合
    [a-z] 表示小写字母集合。
    eg:
    /[a-d]/表示一个字符串包含小写的a到d中的一个
    [A-Z] 表示大写字母集合。
    eg:
    /[A-D]/表示一个字符串包含小写的A到D中的一个
    eg:
    /^[a-zA-Z]/表示一个以字母开头的字符串
    [0-9] 表示数字集合。
    eg:
    /[0-9]/表示一个字符串包含小写的0到9中的一个
    (3)负向类
    通过在[]内部最前面添加^来表示不包含该集合的字符集
    eg:
    [^abc] 表示不包含abc的任意字符集合
    (4)组合类
    通过[]将几个集合拼接在一起表示一个组合的集合。
    eg:
    [a-zA-Z0-9] 表示大小写字母以及数字的结合
    7:预定义特殊字符
    制表符
    回车符
    f 换页符
     与回退字符
    (二)相关的方法
    字符串相关方法: search, match, split
    返回数字类型:search
    返回数组的方法:match,split
    返回字符串的方法:replace
    1:split
    把一个字符串分割成字符串数组。
    stringObject.split(separator,howmany)
    separator字符串或正则表达式(必选)
    howmany该参数可指定返回的数组的最大长度(可选)
    (1)正则表达式
    注意''和' ';
    ' '表示的空格数量,一个还是两个切割
    var str="Hello world"
    var strarr=str.split(" ");
    console.log(strarr);
    //["Hello", "world"]
    var str="Hello,world"
    var strarr=str.split(",");
    console.log(strarr);
    //["Hello", "world"]
    var strarr="hello".split("");
    console.log(strarr);
    //["h", "e", "l", "l", "o"]
    var str="Hello,world"
    var strarr=str.split(",",1);
    console.log(strarr);
    //["Hello"]
    (2)正则切割
    var str = 'a b c';
    console.log(str.split(''))
    console.log(str.split(/s+/))
    //["a", " ", " ", " ", "b", " ", "c"]
    //["a", "b", "c"]
    2:search
    获取字符在字符串中的位置
    stringObject.search(regexp)
    regexp字符串或者正则对象
    未找到任何匹配的子串,则返回 -1。
    search() 方法不执行全局匹配,忽略标志 g,总是从字符串的开始进行检索,
    var str="Hello world!"
    var newstr=str.search("world");
    console.log(newstr);
    //6
    var str="Hello world!"
    var newstr=str.search(/world/);
    console.log(newstr);
    //6
    var str="abcabc!"
    var newstr=str.search(/a/);
    console.log(newstr);
    //0
    var str="abcabc!"
    var newstr=str.search(/a/g);
    console.log(newstr);
    //0
    3:match
    字符串内检索指定的值,或找到一个或多个(regexp 是否具有标志 g,若不具有则执行一次匹配就结束)正则表达式的匹配。
    返回包含指定的值数组,没有找到则返回一个null
    stringObject.match(searchvalue)
    stringObject.match(regexp)
    eg:
    var str = 'abbcccbbbbbddbbbdabbbsbbccdb';
    console.log(str.match(/b+/g))
    console.log(str.match('bb'))
    //["bb", "bbbbb", "bbb", "bbb", "bb", "b"]
    //["bb", index: 1, input: "abbcccbbbbbddbbbdabbbsbbccdb"]
    var str="Hello world!"
    console.log(str.match("world"))
    console.log(str.match("World"))
    // ["world", index: 6, input: "Hello world!"]
    //null
    4:replace
    在字符串中用一些字符替换另一些字符,或替换一个与正则表达式匹配的子串。
    stringObject.replace(regexp/substr,replacement)
    regexp/substr:要替换的模式的 RegExp 对象或子字符串(必须)
    regexp具有全局标志 g,将全局匹配。否则,它只替换第一个匹配子串
    replacement替换文本或生成替换文本的函数(要有返回值,并且将这个返回值作为字符串)。(必须)
    返回值是一个新字符串
    (1)replacement表示替换文本
    eg:
    "abcd".replace("a","0");
    //"0bcd"
    "abcda".replace("a","0");
    //"0bcda"
    eg:
    var str="Hello world world!"
    var newstr=str.replace(/world/, "W")
    var newstr1=str.replace(/world/g, "W")
    console.log(str);
    console.log(newstr);
    console.log(newstr1);
    //Hello world!
    //Hello W!
    //Hello W W!
    (2)replacement表示函数,函数自带参数
    replacement 中的 $ 字符具有特定的含义
    $1、$2、...、$99与 regexp 中的第 1 到第 99 个子表达式相匹配的文本。
    每个匹配都调用该函数,return的值就是要替换的值。
    第一个参数是匹配上的字符串。
    第二个参数匹配上的字符串的下标
    最后一个参数是 源字符串。
    var str = "你好吗,你真的好吗,你一定要好好哒";
    str = str.replace(/你/g,function(a,b,d){
    console.log(arguments);
    return "他/她";
    });
    console.log(str);
    //["你", 0, "你好吗,你真的好吗,你一定要好好哒"]
    //["你", 4, "你好吗,你真的好吗,你一定要好好哒"]
    //["你", 10, "你好吗,你真的好吗,你一定要好好哒"]
    //他/她好吗,他/她真的好吗,他/她一定要好好哒
    var str = "每天200元,吃饭40元";
    newstr = str.replace(/d+元/g,function(a){
    console.log(a);
    return "$" + Math.round((parseInt(a) / 6) * 100) / 100;
    });
    console.log(str);
    console.log(newstr);
    //200元
    //40元
    //每天200元,吃饭40元
    //每天$33.33,吃饭$6.67
    (3)replacement分组
    var str = "hello world";
    newstr = str.replace(/(w+)s(w+)/,"$2 $1");
    console.log(newstr);
    //world hello
    var str = "hello world";
    newstr = str.replace(/(w+)s(w+)/,function(match,$1,$2,index,str){
    console.log(match); //第一个匹配到的字符串
    console.log($1); //第一个匹配的
    console.log($2); //第二个匹配的 /////继续向后
    console.log(index); //匹配到的字符串出现的位置
    console.log(str); //最后一个源串
    });
    console.log(newstr);
    //hello world
    //hello
    //world
    //0
    //hello world
    var jsondata= {
    xingming : "哈哈",
    xingbie : "女"
    }
    var str = "大家好,我叫!xingming!,我是个!xingbie!生"
    str = str.replace(/!(w+)!/g,function(match,$1){
    return jsondata[$1];
    });
    console.log(str);
    //大家好,我叫哈哈,我是个女生
    正则相关方法: exec和test
    exec返回一个数组
    test返回的是布尔值
    1:exec
    与String对象的match()方法类似
    返回一个数组,其中存放匹配的结果。如果未找到匹配,则返回值为 null。
    RegExpObject.exec(string)
    var strreg = /abc/g;
    var new1=strreg.exec('abcd');
    console.log(new1);
    //["abc", index: 0, input: "abcd"]
    var strreg = /abc/g;
    var new2=strreg.exec('abc');
    console.log(new2);
    //["abc", index: 0, input: "abc"]
    var strreg = /abc/g;
    var new3=strreg.exec('ab');
    console.log(new3);
    //null
    2:test
    检测一个字符串是否匹配某个模式.
    RegExpObject.test(string)
    字符串 string 中含有与 RegExpObject 匹配的文本,则返回 true,否则返回 false。
    var mystring ="hello world World!";
    var regexp = /wo/i;
    console.log(regexp.test(mystring))
    //true

  • 相关阅读:
    树莓派4B
    SpringBoot 自定义 info Actuator 原理
    RestTemplate翻译serviceId过程
    ISA, ABI, API区别
    01.编译器结构
    【Git123】Git SSH Key支持多账号
    【消息中间件123】Solace PubSub+ Event Broker介绍
    【ETL123】
    【Http123】Http Timeout
    【性能123】Linux性能之“平均负载”
  • 原文地址:https://www.cnblogs.com/kelly2017/p/7220377.html
Copyright © 2011-2022 走看看