• Javascript正则表达式教程(转)


    基础知识

      学好正则表达式子的关键一步就是花一点时间记住这些符号。这是最好的建议了。坐下来,好好记一记,很快的:

    • .:会匹配任何字符,在dotall模式为false的时候不会匹配换行符。
    • *:匹配0个或者多个上面的那个字符可以匹配的
    • +:匹配一个或者多个上面那个字符可以匹配的
    • ?:上述可匹配字符可选,0个或1个
    • \d:匹配一个数字
    • \w:匹配任何字符(字母数字和下划线)
    • [xyz]:匹配xyz中的一个
    • [xyz]+:匹配xyz中的一个或者多个
    • $:匹配行尾
    • ^:匹配行首
    • [^a-z]:当^在字符集里面的时候,表示不匹配,这个就表示匹配除了小写字母以外的字符

      恩,这个很枯燥,但是还是得记住,必须的。

      正则表达式工具

      当你的正则表达式不能正常工作的时候(无论是他应该工作还是你觉得他应该工作),你真想把头发都扯掉。这个工具很有意思RegExr Desktop app,不光可以实时的检测,还有一个侧栏,提供一些常用符号的解释。

      正则表达式 test()方法

      这个方法接受一个字符串的参数,然后返回一个bool值来表明是否匹配。如果你不需要对匹配结果做特殊的处理–比如验证用户名–那么test()方法就够用了。

    var username = 'johnsmith';
    alert(
    /[a-zA-Z_-]+/.test(username)); //return true;

      上面的例子我们声明的正则表达式用来匹配大小写字母以及_和-。我们用方括号将这个包起来,表示要匹配的字符集。后面的’+'号表示匹配字符集中的一个或者多个,然后通过test()方法来检测,因为我们的用户名johnsmith符合规则,所以返回为true。

      正则表达式 split()方法

      你可能比较熟悉split()方法了。他接受一个正则表达式的参数,用来确定在哪里进行分割,当然用字符串做参数也可以。

    var str = 'this is my string';
    alert(str.split(
    /\s/)); //alerts "this,is,my,string"

      传入\s表示要匹配空格,我们将字符串分割为一个数组,如果你要访问某一个,那么可以明确指出:

    var str = 'this is my string';
    alert(str.spli(
    /\s/)[3]); //alerts string

      正则表达式 replace()方法

      跟你认为的一样,replace()方法就是去替换一段文本的,替换的参数可以是字符串也可以是正则表达式。

      示例1

      如果你想把’hello world’替换为’hello universe’,那么可以这样做:

    var str = 'Hello,World!';
    str
    = str.replace(/World/,'Universe');
    alert(str);

      你可能会问,为什么不直接使用.replace()方法呢,因为这个方法不会复写本来的变量,所以需要重新赋值一下。

      示例2

      另外一个例子,想象这样的场景,为了安全起见,我们需要对用户输入的内容进行转义,比如我们需要移除那些符号,引号,分号等等。这样使用正则就很方便了。

    var username = 'J;ohnSmith;@%';
    username
    = username.replace(/[^A-Za-z\d_-]+/, '');
    alert(username);
    // JohnSmith;@%

      根据最后alert的内容,有人可能认为我们的代码有问题。其实不是的,J后面的那个分号还是被移除了,如果需要移除字符串中的所有符号,我们需要在最后的/后面加一个g参数。

    var username = 'J;ohnSmith;@%';
    username
    = username.replace(/[^A-Za-z\d_-]+/g, '');
    alert(username);
    // JohnSmith

      经过这样的处理之后,就去掉了多余的字符了,注意方括号里面的那个^符号,他表示非。真个正则表达式的意思就是匹配所有A-Z、a-z、以及-和下划线_之外的字符,然后将他们替换为空。

      正则表达式 match()方法

      与test()方法不同的是,match()会返回一个匹配到的字符串的数组。

      示例1

    var name = 'JeffreyWay';
    alert(name.match(
    /e/)); //alerts "e"

      我们注意到,这个字符串中有两个e,但是最后只是alert出来一个,因为缺少了g参数,我们加上之后看看。

    var name = 'JeffreyWay';
    alert(name.match(
    /e/g)); //alerts "e,e"

      如果我们想alert某一个具体的,那么可以:

    var name = 'JeffreyWay';
    alert(name.match(
    /e/g)[1]); //alerts "e"

      示例2

      我们来看看另外一个例子来加深一下理解。

    var string = 'This is just a string with some 12345 and some !@#$ mixed in.';
    alert(string.match(
    /[a-z]+/gi)); // alerts "This,is,just,a,string,with,some,and,some,mixed,in"

      在这个例子中,我们的正则表达式要匹配的是所有的字母,i参数表示忽略大小写,g参数表示全局查找。所以最后alert的就是字符串中所有的单词。如果我们输入要alert的索引值,那么就会输出相对应的单词。

    var string = 'This is just a string with some 12345 and some !@#$ mixed in.';
    var matches = string.match(/[a-z]+/gi);
    alert(matches[
    2]); // alerts "just"

      分割email地址

      为了练习一下,我们来尝试分割一个email地址—rocker@rockux.com—来取出用户名rocker和本站地址rockux.com。

    var email = 'rocker@rockux.com';
    alert(email.replace(
    /([a-z\d_-]+)@([a-z\d_-]+)\.[a-z]{2,4}/ig, '$1, $2')); // alerts "rocker, rockux";

      如果你之前对于正则表达式不是很熟悉,那么这个看着可能有点恐怖,不过没关系,我们一点一点来分解。

    .replace(/[a-z\d_-]+)

      从中间开始,我们去匹配所有的字母数字下划线和-,然后使用+号来匹配多个,我们需要访问这个值,所以用括号括起来。这样我们在后面就可以引用到。

    @([a-z\d-_]+)

      然后去匹配@字符,以及他后面的字母数字下划线和-,同样的,我们用括号括起来,一会要访问他。

    \.[a-z]{2,4}/ig

      这一段表示用来匹配后面的域名类型,ig表示全局匹配并且忽略大小写。在大括号中的数字表示需要匹配的前面字符的起始和结束个数。

    ‘$1,$2′)

      这一部分表示replace方法的第二个参数,用来输入需要替换成为的字符。这里我们使用正则表达式中存储的变量,在这个例子中,$1表示rocker $2表示rockux。

  • 相关阅读:
    硬件——STM32 , SN74HC573锁存器
    【模拟】【杂题】jzoj 6345. 【NOIP2019模拟2019.9.8】ZYB建围墙
    归并排序求逆序对
    归并排序求逆序对
    hdu 4135
    hdu 4135
    牛客小白月赛5 A-无关(relationship)
    牛客小白月赛5 A-无关(relationship)
    HDU4027:Can you answer these queries?
    HDU4027:Can you answer these queries?
  • 原文地址:https://www.cnblogs.com/zhwl/p/1986785.html
Copyright © 2020-2023  润新知