先行断言(也称为"正向先行断言"或"正向预查")是正则表达式中的一种特殊语法,用于匹配后面跟着特定模式的位置,但不包括该模式在匹配结果中。
在 JavaScript 中,先行断言使用 (?=...)
语法:
const regex = /x(?=y)/;
这个正则表达式会匹配后面跟着 y 的 x,但 y 不会包含在匹配结果中。
匹配后面跟着特定字符的单词:
const str = "Hello, JavaScript!";
const regex = /\w+(?=Script)/;
console.log(str.match(regex)); // 输出: ["Java"]
密码强度验证:
// 至少包含一个大写字母、一个小写字母和一个数字
const passwordRegex = /^(?=.*[A-Z])(?=.*[a-z])(?=.*\d).{8,}$/;
console.log(passwordRegex.test("Passw0rd")); // true
console.log(passwordRegex.test("password")); // false
提取价格数值:
const priceStr = "Price: $19.99";
const priceRegex = /\d+\.\d{2}(?=\$)/;
console.log(priceStr.match(priceRegex)[0]); // "19.99"
(?=...)
- 匹配前面是特定模式的位置(?!...)
- 匹配前面不是特定模式的位置(?<=...)
- 匹配后面是特定模式的位置(ES2018新增)(?<!...)
- 匹配后面不是特定模式的位置(ES2018新增)先行断言是编写复杂正则表达式时非常有用的工具,特别是在需要条件匹配但不希望某些部分出现在匹配结果中的情况下。