# 预查格式
(?=pattern)
# 上代码
通俗点说,就是 预查不消耗字符串,仅仅是用来确认是否匹配成功。
var str = "abc";
var reg1 = /a(?=b)bc/;
var reg2 = /a(b)bc/;
console.log(reg1.test(str)); // true
console.log(reg2.test(str)); // false
reg1
中的预查 (?=b)
并没有消耗掉匹配到的字符 b
,而是确认 a
后面的字符是 b
,因此 a
后面的字符 bc
和 预查后面的正则 bc
匹配成功,最后结果为 true
。
而 reg2
中的 (b)
将 str
中的 b
消耗掉,str
中只剩一个字符 c
,无法与 reg2
中 (b)
后面的 bc
相匹配,最后结果为 false
。
# 示例
# 千分制表示一个数字
如何给一串数字用千分制表示?比如 99999999999
变成 99, 999, 999, 999
。
$&
表示与正则表达式相匹配的字符
var reg = /\d{1,3}(?=(\d{3})+$)/g;
var f = '99999999999'.replace(reg, '$&, ');
console.log(f); // 99, 999, 999, 999
正则表达式中的 $
很重要,它保证了每一个匹配到的字符串后面都是三个数字。如果没有 $
,会怎样?
var reg = /\d{1,3}(?=(\d{3})+)/g;
var f = '99999999999'.replace(reg, '$&, ');
console.log(f); // 999, 999, 99, 999