正则表达式高级应用
以前学正则表达式,就只学学匹配规则,比如正则去判断是否手机号,邮箱等等。其实这种也不需要特意去手写了,因为能搜出一大堆。
但是有时候的需求还真搜不出来。,比如截取某种字符串的其中一段。
---start--- gggggg ppppppp ---end--- ---start--- aaaaaaa bbbbbbb ---end--- ---start--- eeeeeee dddddd ---end---
一位朋友想截取倒数第二个---start---到最后一个---end---结尾。
中间的字符不确定。
(注意以下使用js语法)
其实这种用字符串切割简单很多。
var res = str.substr(str.lastIndexOf("---start---",str.lastIndexOf("---start---") - 1) + 1)
然后用正则是这样
var res = str.replace(/[\s\S]*(---start---[\s\S]*---start---[\s\S]*)/,'$1')
不少人看到这个可能一脸懵逼。
其实主要还是 '$1',不太清楚。
这个是取分组的第一组,小括号包的就是一组。
‘$2’就是取第二组,当然你得需要两个括号
这里[\s\S]*就是前面的第一个start,然后小括号是以---start---开头,所以能取到第二个start,然后小括号就是我要取的值了。
再来写一个例子
// leftBanDaysStr 是一段a标签 ,想取此标签的text var leftBanDaysStr ="<a class="ban_detail_url blue" ban_detail_url="1c21cd3f-b489-4ea2-9c74-d4d882493619" title="点击进入详情页">-7</a>"; // 正则截取取数字 var reg = /.*>(.*)<\/a>/; var leftBanDays = leftBanDaysStr.replace(reg, '$1');