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

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:正则表达式的字符串表示,按照字面量形式而非传入构造函数中的字符串模式返回。

JavaScript语法自测(正则表达式)_第1张图片

在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语法自测(正则表达式))