继续浏览精彩内容
慕课网APP
程序员的梦工厂
打开
继续
感谢您的支持,我会继续努力的
赞赏金额会直接到老师账户
将二维码发送给自己后长按识别
微信支付
支付宝支付

js常用正则表达式总结分析

resharpe
关注TA
已关注
手记 102
粉丝 7244
获赞 3476
js常用正则表达式总结分析

Regular Expression:使用单个字符串来描述,匹配一系列符合某个句法规则的字符串(按规则匹配字符串)。

  1. 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
打开App,阅读手记
0人推荐
发表评论
随时随地看视频慕课网APP