美文网首页
JavaScript语法自测(正则表达式)

JavaScript语法自测(正则表达式)

作者: 进击的前端 | 来源:发表于2016-08-26 23:49 被阅读66次

    var expression = / pattern/flags

    g全局,i不区分大小写 case-insensitive m multiline多行
    () 是为了提取匹配的字符串。表达式中有几个()就有几个相应的匹配字符串。
    (\s)表示连续空格的字符串。
    []是定义匹配的字符范围。比如 [a-zA-Z0-9] 表示相应位置的字符要匹配英文字符和数字。[\s
    ]表示空格或者号。
    {}一般用来表示匹配的长度,比如 \s{3} 表示匹配三个空格,\s[1,3]表示匹配一到三个空格。
    (0-9) 匹配 '0-9′ 本身。 [0-9]
    匹配数字(注意后面有 *,可以为空)[0-9]+ 匹配数字(注意后面有 +,不可以为空){1-9} 写法错误。
    [0-9]{0,9} 表示长度为 0 到 9 的数字字符串。
    .表示任意一个字符
    *表示0到无穷
    +表示1到无穷
    ?表示懒惰匹配
    |或者
    ^开始
    $结束
    (?: )表示一个非捕获型分组:即在这个括号内的,但是不在其子括号内所匹配到的字符将不放入结果数组中。

    最后检查各个转义字符

    如果是new RegExp(str,patter)
    5.4.1 RegExp实例属性
    RegExp 的每个实例都具有下列属性,通过这些属性可以取得有关模式的各种信息。
     global:布尔值,表示是否设置了g 标志。
     ignoreCase:布尔值,表示是否设置了i 标志。
     lastIndex:整数,表示开始搜索下一个匹配项的字符位置,从0 算起。
     multiline:布尔值,表示是否设置了m 标志。
     source:正则表达式的字符串表示,按照字面量形式而非传入构造函数中的字符串模式返回。

    在ECMAScript 3 中,
    正则表达式字面量始终会共享同一个RegExp 实例,而使用构造函数创建的每一个新RegExp 实例都是一个新实例

    数字

      it('you should be able to detect a number in a string', function() {
        expect(regexAnswers.containsNumber('abc123')).to.eql(true);
        expect(regexAnswers.containsNumber('abc')).to.eql(false);
      });
    

    \d表示数字

     containsNumber: function(str) {
        return /\d+/.test(str);
      },
    

    重复字母

      it('you should be able to detect a repeating letter in a string', function() {
        expect(regexAnswers.containsRepeatingLetter('bookkeeping')).to.eql(true);
        expect(regexAnswers.containsRepeatingLetter('rattler')).to.eql(true);
        expect(regexAnswers.containsRepeatingLetter('ZEPPELIN')).to.eql(true);
        expect(regexAnswers.containsRepeatingLetter('cats')).to.eql(false);
        expect(regexAnswers.containsRepeatingLetter('l33t')).to.eql(false);
      });
    

    ()用来选取字符串,
    \1表示重复正则第一个圆括号内匹配到的内容
    \2表示重复正则第二个圆括号内匹配到的内容

      containsRepeatingLetter: function(str) {
        return /([A-Za-z])\1/.test(str);
      },
    

    元音字母结尾

    it('you should be able to determine whether a string ends with a vowel (aeiou)', function() {
        expect(regexAnswers.endsWithVowel('cats')).to.eql(false);
        expect(regexAnswers.endsWithVowel('gorilla')).to.eql(true);
        expect(regexAnswers.endsWithVowel('I KNOW KUNG FU')).to.eql(true);
      });
    

    正则表达式中/i,/g,/ig,/gi,/m的区别和含义
    /i (忽略大小写)
    /g (全文查找出现的所有匹配字符)
    /m (多行查找)
    /gi(全文查找、忽略大小写)
    /ig(全文查找、忽略大小写)
    ^用来开头 $用来匹配结尾

      endsWithVowel: function(str) {
        return /[aeiou]$/i.test(str);
      },
    

    三个数字匹配

      it('you should be able to capture the first series of three numbers', function() {
        expect(regexAnswers.captureThreeNumbers('abc123')).to.eql('123');
        expect(regexAnswers.captureThreeNumbers('9876543')).to.eql('987');
        expect(regexAnswers.captureThreeNumbers('abcdef')).to.eql(false);
        expect(regexAnswers.captureThreeNumbers('12ab12ab')).to.eql(false);
      });
    
      captureThreeNumbers: function(str) {
        var match = /\d{3}/.exec(str);
        return match?match[0]:false;
    
      },
    

    满足某种格式

    it('you should be able to determine whether a string matches a pattern', function() {
        // the pattern is XXX-XXX-XXXX where all X's are digits
        expect(regexAnswers.matchesPattern('800-555-1212')).to.eql(true);
        expect(regexAnswers.matchesPattern('451-933-7899')).to.eql(true);
        expect(regexAnswers.matchesPattern('33-444-5555')).to.eql(false);
        expect(regexAnswers.matchesPattern('abc-def-hijk')).to.eql(false);
        expect(regexAnswers.matchesPattern('1800-555-1212')).to.eql(false);
        expect(regexAnswers.matchesPattern('800-555-12121')).to.eql(false);
        expect(regexAnswers.matchesPattern('800-5555-1212')).to.eql(false);
        expect(regexAnswers.matchesPattern('800-55-1212')).to.eql(false);
      });
    
      matchesPattern: function(str) {
        return /^\d{3}-\d{3}-\d{4}$/.test(str);
      },
    

    货币格式匹配

    
      it('you should be able to detect correctly-formatted monetary amounts in USD', function() {
        expect(regexAnswers.isUSD('$132.03')).to.eql(true);
        expect(regexAnswers.isUSD('$32.03')).to.eql(true);
        expect(regexAnswers.isUSD('$2.03')).to.eql(true);
        expect(regexAnswers.isUSD('$1,023,032.03')).to.eql(true);
        expect(regexAnswers.isUSD('$20,933,209.93')).to.eql(true);
        expect(regexAnswers.isUSD('$20,933,209')).to.eql(true);
        expect(regexAnswers.isUSD('$459,049,393.21')).to.eql(true);
        expect(regexAnswers.isUSD('34,344.34')).to.eql(false);
        expect(regexAnswers.isUSD('$,344.34')).to.eql(false);
        expect(regexAnswers.isUSD('$34,344.3')).to.eql(false);
        expect(regexAnswers.isUSD('$34,344.344')).to.eql(false);
        expect(regexAnswers.isUSD('$34,344_34')).to.eql(false);
        expect(regexAnswers.isUSD('$3,432,12.12')).to.eql(false);
        expect(regexAnswers.isUSD('$3,432,1,034.12')).to.eql(false);
        expect(regexAnswers.isUSD('4$3,432,034.12')).to.eql(false);
        expect(regexAnswers.isUSD('$2.03.45')).to.eql(false);
      });
    

    ? 是 单字符匹配 * 是 多字符匹配,$和.符号需要转义

      isUSD: function(str) {
        return /^\$\d{1,3}(,\d{3})*(\.\d{2})?$/.test(str);
      }
    

    正则 实现trim

    reg = /(^\s+)|(\s+$)/g
    

    正则匹配网址,http,https

    var pattern = /^http(s)*:\/\/([\w-]+\.)+([\w-]+)(\/){0,1}(#([\w-]+)){0,1}$/i
    

    相关文章

      网友评论

          本文标题:JavaScript语法自测(正则表达式)

          本文链接:https://www.haomeiwen.com/subject/pupzsttx.html