为了账号安全,请及时绑定邮箱和手机立即绑定

js正则求助 匹配前面为abc,但是只输出后面的部分

js正则求助 匹配前面为abc,但是只输出后面的部分

偶然的你 2019-04-10 20:47:55
如下'left:-11px;bottom:-103px;top:10px;'.match(/(?=bottom\s*:\s*)[^;]*;/g);//=》["bottom:-103px;"]这个无论如何都是匹配整个bottom:-103px;但是我只想输出这里的-103px到底该怎么改呢?我找到这个类似的'aaazhaoxianliea'.match(/zhao(?=xianlie)/g);//=》["zhao"]这是匹配后面紧跟着xianlie的zhao,但是当我想把它改为匹配xianlie,但是前面必须有zhao时就不行了,难道不是单纯的改一下前后位置吗?'aaazhaoxianliea'.match(/(?=zhao)xianlie/g);//=》null
查看完整描述

2 回答

?
扬帆大鱼

TA贡献1799条经验 获得超9个赞

'aaazhaoxianliea'.match(/zhao(?=xianlie)/g);//=》["zhao"]
这个称作正向预查形如(?=pattern)
所谓正向预查,意思就是:要匹配的字符串,后面必须紧跟着pattern
但是负向预查的意思并不是要匹配的字符串,前面紧跟着pattern
负向预查,(?!pattern),要求字符串的后面不能紧跟着某个pattern
下面来看第一段代码
'left:-11px;bottom:-103px;top:10px;'.match(/(?=bottom\s:\s)[^;]*;/g);//=》["bottom:-103px;"]
这里使用正向预查是没有意义的,等价于
'left:-11px;bottom:-103px;top:10px;'.match(/bottom\s*:\s*[^;]*;/g);//=》["bottom:-103px;"]
为了获取bottom:后面的值,首先不能用全局匹配,并且需要对后面的部分进行分组,也就是将[^;]*改为([^;]*)
'left:-11px;bottom:-103px;top:10px;'.match(/bottom\s*:\s*([^;]*)/);
这样返回的就是一个数组//["bottom:-103px","-103px"]
然后取出数组元素即可,也就是
'left:-11px;bottom:-103px;top:10px;'.match(/bottom\s*:\s*([^;]*)/)[1]//-103px
                            
查看完整回答
反对 回复 2019-04-10
?
哔哔one

TA贡献1854条经验 获得超8个赞

vararr=/bottom\s*:\s*([^;]*);/g.exec('left:-11px;bottom:-103px;top:10px;');
console.log(arr[1]);//-103px
                            
查看完整回答
反对 回复 2019-04-10
  • 2 回答
  • 0 关注
  • 213 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信