在正则表达式中前后查找是经常用到的,例如要提取某一对标签内的文本却又不包含此标签就可以通过正则表达式的前后查找来实现。
1、向前查找
向前查找制定了一个必须匹配但不在结果中的返回模式,实际上就是一个以?=开头的子表达式,需要匹配的文本跟在= 的后面,在同一个搜索模式里可以使用多个向前查找表达式,它们可以出现在模式的任何位置,例如原始的文本是一些URL地址,需要提取这些url地址的协议部分,通过向前查找能够轻松搞定:
var url = "http://www.baidu.com " +
"https://google.com " +
"http://taobao.com"
console.log(url.match(/\w+(?=:)/g));
输出的结果为:["http", "https", "http"],通过例子可以看出向前查找的实际效果就是以某个文本结束返回的结果中却不包含该匹配文本。
2、向后查找
向前查找操作符是?=,向后查找的的操作符是?<=,两者的用法差不多,都是作为一个子表达式,而且后面要跟匹配的文本,例如要提取原始文本中的金额:
var jg = "iphone:$88.88 " +
"oppo: $10.23" +
"honor:$25.56";
console.log(jg.match(/(?<=\$)[0-9.]+/g))
输出的结果为:["88.88", "10.23", "25.56"],通过例子可以看出向后查找的实际效果是以某个匹配的文本开始返回的结果中不包含该匹配文本。
前后查找也是有取非操作的:
操作符 | 说明 |
(?=) | 正向前查找 |
(?!) | 负向前查找 |
(?<=) | 正向后查找 |
(?<!) | 负向后查找 |