有的时候,我们在项目中会遇到这种需求,提取字符串中特定的某一部分,譬如我们向后端请求数据,得到图片的URL数据,像这样"/resources/images/beauty.jpg",我们需要提取beauty.jpg这一部分,该怎么做呢?
今天和大家分享两个方法,一个是字符串对象的match(),还有正则对象的exec(); 这两种方法都可以实现这个功能
一.match(),使用正则表达式子表达式来提取目标字符串
let str = "/resources/images/beauty.jpg"
console.log(str.match(/.*\/.*\/(.*\..*/))
//结果是一个数组,第一项为整个正则表达式匹配结果,就是这个字符串,第二项就是子表达式的匹配结果
//[/resources/images/beauty.jpg,beauty.jpg]
let result = str.match(/.*\/.*\/(.*\..*/)
那么result[1]就是我们想要的结果,beauty.jpg
?
复制代码
不过这里要注意下,使用match()方法时,如果指定了全局模式,会忽略子表达式的提取,直接匹配整个表达式;我们想要的那部分会拿不到
二.exec(),这是个正则对象的方法
let str = "/resources/images/beauty.jpg"
console.log(/.*\/.*\/(.*\..*)/.exec(str))
//exec()方法返回一个数组,第一项为整个正则表达式匹配结果,就是这个字符串,第二项就是子表达式的匹配结果,和match()返回的结果是一样的
let result = /.*\/.*\/(.*\..*)/.exec(str),还是result[1],beauty.jpg
虽然结果一样,这两个方法其实还是有一些差别的,具体的可以自行百度,这个点并不是本文关注的点
复制代码
利用正则表达式提取特定字符串,核心点就在于子表达式的使用