正则表达式的作用
匹配特殊字符串的最佳选择。
创建RegExp对象
直接量语法: /pattern/attributes
创建 RegExp 对象的语法:new RegExp(pattern, attributes);
var reg = /abcd/i; //var reg = new RegExp('abcd',i);
var str = 'abCd';
console.log(reg.test(str)) // i表示忽略大小写,输出 true
//new RegExp(reg)与RegExp(reg)的区别:
var re = new RegExp(reg);
console.log(re) ///abcd/i 与reg不指向同一引用
re.suiyi = 1;
console.log(reg.suiyi); //undefined
var re2 = RegExp(reg)
console.log(re2) ///abcd/i 虽然结果与上面re一样 但是与reg指向同一引用
re2.suiyi = 2;
console.log(reg.suiyi) // 2
基本语法
支持正则表达式的String对象的方法-match
var reg = /^a/gm; //m多行匹配
var str = 'abx\na'
console.log(str.match(reg)) //[ 'a', 'a' ]
var reg2 = /[\d][\d][\d]/g;
var str2 = '12309kj22123sk'
console.log(str2.match(reg2)); //[ '123', '221' ]
var reg3 = /[ab][bc][cd][d]/g;
var str3 = 'abcd';
console.log(str3.match(reg3)) //[ 'abcd' ]
var teststr = 'aaaabbbccc';
var testreg = /(\w)\1*/g; //反向引用多个
console.log(teststr.replace(testreg, '$1')) //abc
量词{}的使用
n+ {1, } ,n* {0, } ,n? {0,1}
正则表达式是贪婪匹配原则,想打破贪婪匹配就加个?
var reg = /\w*/g;
var str = 'abc';
console.log(str.match(reg)) //[ 'abc', '' ]
var reg2 = /\d*/g;
console.log(str.match(reg2)) //[ '', '', '', '' ]
var reg3 = /\w{3,5}/g;
var str3 = 'aaaaaaaaaaaaabbb'
console.log(str3.match(reg3)) //[ 'aaaaa', 'aaaaa', 'aaabb' ]
var reg4 = /\w{2,}/g;
console.log(str3.match(reg4)) //[ 'aaaaaaaaaaaaa' ]
//检验一个字符串首尾是否含有字符串
var re = /^\d|\d$/g;
支持正则表达式的 String 对象的方法-replace
2、...、$99:与 regexp 中的第 1 到第 99 个子表达式相匹配的文本。
var name = "Doe, John";
var test = name.replace(/(\w+)\s*, \s*(\w+)/, "$2 $1");
console.log(test); //John Doe
RegExp 对象属性lastIndex和方法exec
lastIndex:一个整数,标示开始下一次匹配的字符位置。
exec:检索字符串中指定的值。返回找到的值,并确定其位置。
var reg = /ab/g;
var str = 'ababab';
console.log(reg.exec(str)) //[ 'ab', index: 0, input: 'ababab' ]
console.log(reg.lastIndex) //2
console.log(reg.exec(str)) //[ 'ab', index: 2, input: 'ababab' ]
console.log(reg.lastIndex) //4
console.log(reg.exec(str)) //[ 'ab', index: 4, input: 'ababab' ]
console.log(reg.exec(str)) //null