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
网友评论