一、首先了解一下正则表达式的基本方法
字面量法:var re = /d(b+)d/
调用RegExp构造方法:var reg = new RegExp("/d(b+)d/","g");第一个参数是匹配规则,第二个参数是正则修饰符
i表示区分大小写
m表示多行匹配
g全局匹配
二、支持正则的字符串内置方法
var str = "cdbbdbsbz";
search()方法 例子:str.search(/d(b+)d/) //---1 该方法匹配成功返回匹配的索引,否则返回-1
match()方法:str.match(/d(b+)d/) //----["dbbd", "bb", index: 1, input: "cdbbdbsbz", groups: undefined]若有匹配的项返回array数组,否则返回null ------注:str.match(/d(b+)d/g)全局匹配返回 ["dbbd"]
exec()方法:/d(b+)d/g.exec(str)//----["dbbd", "bb", index: 1, input: "cdbbdbsbz", groups: undefined]
var myRe = /d(b+)d/g;
var myArray = 'cdbbdbsbz'.match(myRe);
console.log('myRe.lastIndex', myRe.lastIndex); // 下一个匹配开始时的索引-----0
var myRe = /d(b+)d/g;
var myArray = myRe.exec('cdbbdbsbz');
console.log('myRe.lastIndex', myRe.lastIndex); // 下一个匹配开始时的索引---------5
总结:对于 RegExp 的方法 exec
匹配成功时,会返回该数组并更新正则的全局检索属性(lastIndex
);而字符串的方法 match
则不会更新全局检索属性
replace()方法 str.replace(/d(b+)d/,"...")//----c...bsbz 根据一个正则替换字符串匹配项的方法,返回替换后的字符串
第二个参数可以是, $1,$2,$3….$99 含义是:与regexp中的第1到第99个子表达式相匹配的文本
例如:
test()方法:是否存在匹配项的方法,若存在返回true否则返回false
split()方法:
正则表达式的元字符类型如下:
. | 查找任意单个字符,换行符除外 |
\w | 任意一个字数数字下划线0-9,a-z,A-Z中任意一个[A-Za-z0-9_] |
\W | 查找非数字字母下划线的字符[^A-Za-z0-9_] |
\d | 匹配一个数字字符[0-9] |
\D | 匹配一个非数字字符[^0-9] |
\s | 匹配空白字符包括空格,制表符等 |
\S | 匹配非空白字符[ ^\f\n\r\t\v\u00a0\u1680\u180e\u2000-\u200a\u2028\u2029\u202f\u205f\u3000\ufeff] |
\b | |
\B | |
x|y | 表示匹配x或者y |
(x) | 表示匹配分组 x,并保存匹配结果(反向引用),这组小括号被称为捕获括号 |
(?:x) | 表示匹配分组但不产生反向引用,这组小括号被称为非捕获括号 比如:对于 |
x(?=y) | 表示只匹配后边紧跟分组y的字符x,先行断言 比如:Jack(?=Sprat|Frost) 表示只匹配后面跟着 "Sprat" 或 "Frost" 的 "Jack"。 |
x(?!y) | 表示只匹配后面不是紧跟着分组 y 的字符 x,这模式称为否定先行断言(lookahead)。比如:/\d+(?!\.)/ 表示匹配没有小数点的数字。 |
量词:
+ | 匹配一次或者多次相当于{1,} |
* | 匹配0次或者多次相当于{0,} |
? | 匹配0次或者是1次相当于{0,1}如果 ? 是限定符 * 或 + 或 ? 或 {} 后面的第一个字符,那么表示非贪婪模式(尽可能少的匹配字符) |
{n} | 匹配n次 |
{n,m} | 匹配最少n个最多m个字符串 |
{n,} | 匹配至少n个某个字符串 |
位置符号:
$ | 结束符号例如:n$以n结束的字符串。 在多行模式下,表示 匹配每行的结束。 |
^ | 表示匹配字符串的开头、在多行模式下,表示匹配每行的开头。注意:如果出现在集合中的第一个字符,它表示否定的意思 比如: |
(?=) | 肯定正向环视 例:?=n,匹配其后紧接指定的n字符串var pattern=/str(?=ings)ing/;/ 表示匹配 r 后面必须有ings的 string字符 |
(?!) | 否定正向环视,例如:?!n,匹配其后没有紧接指定的n字符串 |
字符类:
[0-9] | 匹配 0 到 9 间的字符 |
[a-zA-Z] | 匹配任意字母 |
[^0-9] | 不等于0到9的其它字符 |
例如:
function upper(all,letter){
console.log("all="+all+"letter="+letter)return letter.toUpperCase();
}
var pattern=/-(\w)/g;//传入匹配的完整的字符串作为第一个参数,捕获结果作为第二个参数
var str="border-bottom-width";
console.log(str.replace(pattern,upper)); //borderBottomWidth