两种形式
- 字面量
- RegExp对象
匹配形式
- 严格匹配
- 匹配字符组
//[]:组,匹配组中出现的任意字符
var pattern = /[sysuygm]/;
console.log(pattern.test('sysu'));
console.log(pattern.test('ygm'))
// 脱字符^: 指定不想匹配到的字符
var pattern = /[^sysuygm]/;
console.log(pattern.test('sysu')); //false
console.log(pattern.test('d')); //true
// 匹配字符或数字的某个连续范围
var pattern = /[0-6]/;
console.log(pattern.test(12345));//true
console.log(pattern.test(678));//true
console.log(pattern.test(78));//false
//反义字符
var pattern = /[\^sysuygm]/;
console.log(pattern.test('sysu')); //true
console.log(pattern.test('^')); //true
//exec()方法:返回所有匹配的一个数组
var strToMatch = "welcome to javascript's world";
var resExAt = /javascript/;
var arrMatched = resExAt.exec(strToMatch);
console.log(arrMatched);
// [ 'javascript',
// index: 11,
// input: 'welcome to javascript\'s world' ]
//g:全局匹配
var strToMatch = "welcome to javascript's and java's world";
var resExAt = /java/g;
var arrMatched = resExAt.exec(strToMatch);
console.log(arrMatched);
// [ 'java',
// index: 11,
// input: 'welcome to javascript\'s and java\'s world' ]
//使用String对象的match()方法
var strToMatch = "welcome to javascript's and java's world";
var resExAt = /java/g;
var arrMatched = strToMatch.match(resExAt);
console.log(arrMatched);//[ 'java', 'java' ]
//使用String对象的replace()
var strToMatch = "welcome to javascript's and java's world";
var resExAt = /java/g;
var arrMatched = strToMatch.replace(resExAt, 'golang');
console.log(arrMatched);//welcome to golangscript's and golang's world
//第二个参数也可以传callback
var arrMatched1 = strToMatch.replace(resExAt,function (matchText) {
return 'golang';
});
console.log(arrMatched1);//welcome to golangscript's and golang's world
// 使用String对象的split()
var strToMatch = "程序=算法+数据结构";
var resExAt = /\+/g; //需要转义!
var arrMatched = strToMatch.split(resExAt);
console.log(arrMatched);//[ '程序=算法', '数据结构' ]
//简单字符组匹配多个模式
// i: 忽视大小写
var strToMatch = "dear bat,a fat Cat, a fat cat";
var resExAt = /[abc]at/gi;
var arrMatched = strToMatch.match(resExAt);
console.log(arrMatched);//[ 'bat', 'Cat', 'cat' ]
console.log(resExAt.exec(strToMatch))
//[ 'bat', index: 5, input: 'dear bat,a fat Cat, a fat cat' ]
var strToMatch = "r1,R2,r3,R4,r5,r6,r7";
var resExAt = /r[0-5]/gi;
var arrMatches = strToMatch.match(resExAt);
console.log(arrMatches);//[ 'r1', 'R2', 'r3', 'R4', 'r5' ]
//^:否定字符用来过滤
var resExAt = /r[^0-5]/gi;
var arrMatches = strToMatch.match(resExAt);
console.log(arrMatches);//[ 'r6', 'r7' ]
// \d:任意的单个数字字符
// \w:任意单个字母或者数字字符
// \s:任意的单个空白字符(空格,制表符,换行符等)
// \D:任意的单个非数字字符
// \W:任意的单个非字母或数字字符
// \S:任意的单个非空白字符
// .:除换行符之外的任意单个字符
var str = '135-6878-0989';
var re = /[0-9][0-9][0-9]-[0-9][0-9][0-9][0-9]-[0-9][0-9][0-9][0-9]/;
var arr = str.match(re);
console.log(arr);
//[ '135-6878-0989', index: 0, input: '135-6878-0989' ]
var re = /\d\d\d-\d\d\d\d-\d\d\d\d/;
var arr = str.match(re);
console.log(arr);
//[ '135-6878-0989', index: 0, input: '135-6878-0989' ]
- 重复出现
// ?:出现0次或者1次
// *:出现0次或多次
// +:出现1次或多次
// {n}:只出现n次
// {n,m}:出现n到m次
// {n,}:至少出现n次
// {,n}:出现0到n次
示例:
var re = /sysuyg?m/;
console.log(re.test('sysuym')); //true
console.log(re.test('sysuyggm')); //false
console.log(re.test('sysuygm')); //true
console.log(re.test('sysu')); //false
console.log(/\d+/.test('1234')); //true
console.log(/\d+/.test(''));//false
//使用()进行分组
var re = /ha+(ha+)+/i;
str1 = 'haha';//ha(ha)(ha)
str2 = 'haahaahaa'; //ha(haa)(haa)
str3 = 'hahha';//ha(h)(ha)
console.log(re.test(str1));//true
console.log(re.test(str2));//true
console.log(re.test(str3));//false
//使用 \b 指定单词边界
var str = 'a cat';
var re = /\bcat/
console.log(re.test(str));//true
console.log(re.test('tomcat'));//false
var re = /cat\b/;
console.log(re.test('tomcat'));//true
var re = /\bcat\b/;
console.log(re.test('tomcat'));//false
console.log(re.test('tom cat'));//true
//选择结构
var re = /(ab)+|(cd)+/;
console.log(re.test('abcd'));//true
console.log(re.test('ababcd'));//true
console.log(re.test('abacd'));//true
console.log(re.test('ac')); //false
- 首部尾部
//匹配特定字符开始的字符串
var re = /^test/;
console.log(re.test('est'));//false
console.log(re.test('test'));//true
console.log(re.test('testdd'));//true
//匹配特定字符结尾的字符串
var re = /test$/;
console.log(re.test('tes'));//false
console.log(re.test('ddtest'));//true
console.log(re.test('testt')); //false
- 向后引用
//匹配特定字符开始的字符串
var re = /^test/;
console.log(re.test('est'));//false
console.log(re.test('test'));//true
console.log(re.test('testdd'));//true
//匹配特定字符结尾的字符串
var re = /test$/;
console.log(re.test('tes'));//false
console.log(re.test('ddtest'));//true
console.log(re.test('testt')); //false
var re = /([xyz])a\1/;
console.log(re.test('xax')); //true, 因为\1匹配的是 x
console.log(re.test('xay')); //false, 因为\1匹配的是 x
console.log(re.test('xyax')); //false, 因为\1匹配的是 x,a对应了y
- 惰性限定符和贪婪限定符
- 惰性限定符尽可能少地匹配字符(?)
var re = /\w+?e/;
console.log(re.test('a fat cat')); //false
console.log(re.test('a warm coffee'));//true
console.log(re.exec("a warm coffee"));
//[ 'coffe', index: 7, input: 'a warm coffee' ]
var re = /\w+e/g;
console.log(re.exec("a warm coffee"));
//[ 'coffee', index: 7, input: 'a warm coffee' ]
//删除字符串收尾的空格
function trim(str) {
return (str||'').replace(/^\s+|\s+$/g,'');
}
console.log("---" + trim(" cat ") + "---");
//---cat---
var re = /\s+/g;
console.log('a cat is fat'.replace(re,' '));//a cat is fat