正则基础
1 正则表达式的字符匹配攻略 正则表达式是匹配模式,要么匹配位置,要么匹配字符 字符匹配攻略 1.1 两种模糊匹配
量词 具体含义
贪婪量词 惰性量词
字符组 具体含义 如果想要匹配任意一个字符,那么可以使用 [/d/D],[/w/W],[/s/S],[^] 中的任意一个都可以; 1.3 多选分支(惰性匹配,如果匹配到了,则后面的就不在进行匹配) /hello|world/ var str = 'abc'; console.log(str.replace(/^|$/g,'#')); //如果没有加 g; #abc ;如果加了 g: #abc#; 测试案例 匹配24小时制时间 var reg = /^([01][1-9]|[2][0-3]):([0-5][0-9])$/; // 23:59 // 02:19 2 正则表达式的位置匹配攻略 将位置可以理解成一个空的字符串 : '',一定要牢记这句话; 也就是说在一个字符串中找到相应的位置,找到位置之后,对该位置进行操作; 2.1 在ES5中有如下几个表示位置的锚:^. $ b. B. (?=p) (?!p) 首先,丢掉其他地方看的一些^ $的解释,以什么什么开头,或者以什么什么结尾,要从位置可以理解为(空字符)的角度去看待这些符号; ^ 匹配到的位置是一个字符串的开头位置; $ 匹配到的位置是一个字符串的结尾位置; b 是单词边界,具体就是 w([0-9a-zA-Z_])和W之间的位置,也包括 w 与^ (开头)$(结尾) 之间的位置 B 是非单词边界,具体就是 w与w;W与W ; W与 ^ $(开头,结尾) var str = '[a b[JS]c.lesson'; console.log(str.replace(/b/g,"#")); //[#a# #b#[#JS#]#c#.#lesson# console.log(str.replace(/B/g,"#")); //#[a b[J#S]c.l[/!--empirenews.page--]s#s#o#n (?=p) 代表p前面的位置或者说该位置后面的字符要匹配p ; (?!p) 代表和上面相反的意思; //看下这个,全局匹配会替换掉全局中匹配到的字符 /a+/g ; var str3 = 'aalllaaaaaxxxxxaffffaaaaaggg'; var reg3 = /a+/g; console.log(str3.replace(reg3,',')); //,lll,xxxxx,ffff,ggg //以下重点理解下(?= p)这个匹配p前面的位置(空字符),在下面这个案例中p是 (d{3})+$,它将匹配到三个字符 // 646;654646 ; 254654646 所以(?=(d{3})+$)代表着三个字符前面的位置(空字符)然后将该字符替换成 ','; var str2 = '1254654646' var reg2 = /(?=(d{3})+$)/g; console.log(str2.replace(reg2,'); //1,254,654,646 //但是对于123456789 =>,123,456,789;所以不能匹配到开始的位置,(?!^)就可以实现; var reg2 = /(?!^)(?=(d{3})+$)/g; 3 正则表达式的括号的作用 3.1 分组引用 var reg = /(d{4})-(d{2})-(d{2})/; var str ='2019-02-24'; console.log(str.match(reg)); console.log(reg.exec(str)); //两者的输出都是: ["2019-02-24","2019","02","24",index:"0","2019-02-24"] 3.2 RegExp的全局属性 $1至$9 //对于上面的案例在加以下代码 console.dir(RegExp); //[$1:'2017',$2:'02',$3:'24',$4:'',$5:'',$6:'',$7:'',$8:'',$9:'',$&:'2019-02-24',$`:'',$';'',$+:'24',$_:'2014-02-24']; console.log(RegExp.$1); console.log(RegExp.$2); console.log(RegExp.$3); 3.3 对于常用API中使用分组引用; 3.3.1 str.replace(regexp|substr,newSubstr|function) ;
match: 匹配到的子串 ;p1,p3 ..: 第几个分组 ; offset:匹配到的子串在整个字符串中出现的位置;string:整个被撇配的字符串 console.log(str.replace(reg,'$3/$2/$1'));//24/02/2019 var retDate = str.replace(reg,function(match,p3,str){ console.log(arguments); //["2019-02-24","2019-02-24",...] return [p3,p1].join('/'); }); console.log(retDate);//24/02/2019; 3.3.2 str.match(reg) :当一个字符串与一个正则表达式匹配时, match()方法检索匹配项。 参数reg:1 如果未提供任何参数 ,直接使用match(),那么会返回一个[""];2 如果传入一个非正则表达式对象,则会隐式地使用 new RegExp(obj) 将其转换为一个 RegExp
3.3.3 str.search(regexp) :检索一个字符串中是否可以匹配到相应的正则,返回匹配到正则结果在字符串中出现的索引,如果匹配不到则返回 -1 var reg = /[A-Z]/g; var str = 'abcAFs'; console.log(str.search(reg));//3 返回匹配到的结果在字符串中的索引位置,注意位置是从 0 开始的 3.4 反向引用:除了在API中可以引用分组,也可以在正则本身中引用分组,但是只能引用前面出现的分组 //比如要写一个正则匹配如下三种格式 2014-08-23 2014.08.24 2014/08/24 var reg = /d{4}(-|.|/)d{2}(-|.|/)d{2}/ //这个正则虽然可以匹配到以上三种格式的数据,但是也会匹配到 2014.08/24 这样的数据 此时就需要反向引用 var reg = /d{4}(-|.|/)d{2}1d{2}/; //此时的 1 就代表前面的(-|.|/)这个分组,无论这个分组匹配到什么,1 都会匹配到和它一样的具体的某个字符 //这样就不会出现匹配到。2014.08/24 这样的错误了; 对于括号的嵌套,以作括号为基准,作为每个分组的匹配结果; 3.5 捕获括号 以上介绍了捕获括号,也就是捕获型分组会在API或者正则种被捕获,如果我们对一个括号仅仅是希望其匹配到对应的字符,而不需要捕获,那么,可以使用 (?:p) //非捕获型分组 (p) //捕获型分组 4 正则表达式的结构和拆分 4.1 结构和操作符
优先级从上至下; 5 正则表达式其余操作 regExp.test(str) :当你想要知道一个模式是否存在于一个字符串中时,就可以使用 test()(类似于String.prototype.search()方法),差别在于test返回一个布尔值,而 search 返回索引(如果找到)或者-1(如果没找到) var reg = /[A-Z]/g; var str = 'abcAFs'; console.log(reg.test(str));//true
千分位分隔符
(编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |
- swift3-字符/字符串
- vue2.0 element-ui中el-upload的before-upload方法返回fal
- MSSQL XML使用(一):由简单的select语句Auto 生产XML
- OO 泛化,依赖,关联,聚合
- Ajax之get、post实例(最原始的XMLHttpServlet)
- VC2008发布程序时指定库版本 || 详解“由于应用程序配置不
- 在Swift使用Objective-C时,Xcode不识别CGFloat / UIFont /
- 用Reactor框架实现一个简单的tcp服务器
- c – 以编程方式迭代iOS应用程序中的所有窗口/视图
- postgresql在windows7环境下的热备hot standby