RegExp正则表达式

669 阅读1分钟

正则表达式的作用

匹配特殊字符串的最佳选择。

创建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

基本语法

image.png

支持正则表达式的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

11、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

正则表达式的教程笔记

正则表达式不要背