js正则求助 匹配前面为abc,但是只输出后面的部分
如下
'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
妮可喵帕斯
9 years, 10 months ago
Answers
'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
colray
answered 9 years, 10 months ago