Regular Expression:使用单个字符串来描述,匹配一系列符合某个句法规则的字符串(按规则匹配字符串)。
- RegExp对象
使用方式
- 字面量方式
var reg=/\bis\b/g;
- 构造函数方式
var reg=new RegExp('\\bis\b','g')
修饰符:g(global全局),i(忽略大小写ignore case),m(多行multiple lines)
元字符
\t: 水平制表符
\v:垂直制表符
\n:换行符
\r:回车符
\0:空字符
\f:换页符
\:cX:与Ctrl+X对于
//应用
'eragtrgtrwh'.replace(/[gtr]/g,'X');//"eXaXXXXXXwh"
//取反
'eragtrgtrwh'.replace(/[^gtr]/g,'X');//"XrXgtrgtrXX"
范围类
如可以用[a-zA-Z]来连接两个字符表示从a到z的任意字符
'eragtrFgtEwh'.replace(/[a-z]/g,'X');
// "XXXXXXFXXEXX"
'eragtrFgtEwh'.replace(/[a-zA-Z]/g,'X');
// "XXXXXXXXXXXX"
'2016-12-18'.replace(/[0-9]/g,'X');
//"XXXX-XX-XX"
'2016-12-18'.replace(/[0-9-]/g,'X');
//"XXXXXXXXXX"
预定义类(匹配常见字符类)
.===[^\r\n] //除了回车符换行符之外所有字符
\d===[0-9] //数字字符
\D===[^0-9] //非数字字符
\s===[\t\n\x0B\f\r] //空白符
\S===[^\t\n\x0B\f\r] //非空白符
\w===[a-zA-Z 0-9] //单词字符
\W===[^a-zA-Z 0-9] //非单词字符
//如:匹配ab+数字+任意字符的字符串
ab[0-9][^\r\n]===ab\d.
边界
^ start with
$ end with
\b word boundary
\B unword boundary
'This is your sister'.replace(/is/g,'X')
// "ThX X your sXter"
'This is your sister'.replace(/\bis\b/g,'X')
// "This X your sister"
'This is your sister'.replace(/\Bis\b/g,'X')
// "ThX is your sister"
'@qq@sfer@qww@'.replace(/@./g,'Q')
// "QqQferQww@" //@和任意字符
'@qq@sfer@qww@'.replace(/^@./g,'Q')
// "Qq@sfer@qww@" //以@开头+任意字符
'@qq@sfer@qww@'.replace(/.@/g,'Q')
//"@qQsfeQqwQ"//任意字符+@
'@qq@sfer@qww@'.replace(/.@$/g,'Q')
// "@qq@sfer@qwQ" //任意字符+以@结尾
量词
? [0-1]
+ [1-n]
* [0-n]
{n} n
{n,m} [n,m]
{n,} [n,...]
应用示例:
//贪婪模式:默认匹配最后一个
'123456789'.replace(/\d{3,6}/,'X')
//"X789"
'123456789'.replace(/\d{3,6}?/,'X')
// "X456789"
分组group
'a1b2c3d4'.replace(/([a-z]\d){3}/g,'X')
"Xd4"
或 Byron|casper
'ByronCasper'.replace(/Byron|Casper/g,'X')
//"XX"
'ByronsperByrCasper'.replace(/Byr(on|Ca)sper/g,'X')
// "XX"
反向引用
'2016-12-18'.replace(/(\d{4})-(\d{2})-(\d{2})/g,'$2-$3-$1')
//"12-18-2016"
//忽略分组(?:Byron).(ok)
前瞻后顾
从文本头部向尾部开始解析,文本尾部方向;后顾反之(js不支持)
- 正向前瞻:
exp(?=assert)
- 负向前瞻:
exp(?!assert)
实例
'a2*3we4b5'.replace(/\w(?=\d)/g,'X')
// "X2*3wX4X5"
'a2*3we434b5'.replace(/\w(?!\d)/g,'X')
//"aX*XXe43XbX"
对象属性
- g,i,m
- lastIndex:当前表达式匹配内容的最后一个字符的下一个位置
- source:文本字符串
var reg1=/\w/,reg2=/\w/g; reg1.test('ab') //true ... reg2.test('ab') //true reg2.test('ab') //true reg2.test('ab') //false,lastIndex作怪 while(reg2.test('ab')){console.log(reg2.lastIndex)} // 1 2