正则表达式反向断言
ES9支持反向断言,通过对匹配结果前面的内容进行判断,对匹配进行筛选。
非获取匹配:
组group的概念,用()包含的是组,里面的数据会获取供以后使用,这叫获取匹配,通过Match.group(index)获取,第一个group从1开始,index=0表示获取整个匹配字符串,非获取匹配:正向表示匹配前面,反向表示匹配后面。
(?=pattern) :正向肯定预查,在任何匹配pattern的 字符串 开始处匹配查找字符串。这是一个非获取匹配,也就是说,该匹配不需要获取供以后使用。例如,“Windows(?=95|98|NT|2000)”能匹配“ Windows2000 ”中的“Windows”,但不能匹配“ Windows3.1 ”中的“Windows”。预查不消耗字符,也就是说,在一个匹配发生后,在最后一次匹配之后立即开始下一次匹配的搜索,而不是从包含预查的字符之后开始。
(?!pattern): 正向否定预查,在任何不匹配pattern的字符串开始处匹配查找字符串。这是一个非获取匹配,也就是说,该匹配不需要获取供以后使用。例如“Windows(?!95|98|NT|2000)”能匹配“Windows3.1”中的“Windows”,但不能匹配“Windows2000”中的“Windows”。
(?<=pattern) :反向肯定预查,与正向肯定预查类似,只是方向相反。例如,“(?<=95|98|NT|2000)Windows”能匹配“2000Windows”中的“Windows”,但不能匹配“3.1Windows”中的“Windows”。
(?<!pattern) :反向否定预查,与正向否定预查类似,只是方向相反。例如“(?<!95|98|NT|2000)Windows”能匹配“3.1Windows”中的“Windows”,但不能匹配“2000Windows”中的“Windows”。
代码案例
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset ="UTF-8">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>正则扩展-正则表达式反向断言</title>
</head>
<body>
< script >
//声明字符串
let str = 'JS5211314你知道么555啦啦啦';
//正向断言
const reg = /d+(?=啦)/;
const result = reg.exec(str);
//反向断言
const reg = /(?<=么)d+/;
const result = reg.exec(str);
console.log(result);
</script>
</body>
</html>