疑问1 :为什么这个结果是 a
疑问2: 这个我可以看懂
疑问3:这个也不明白,如果是null表示没找到,但是这个结果是空的字符串,表示找到了吗?
疑问4:这个嘞
疑问5:看了这个说明不是很理解 ,可以详细解释一下吗
疑问6:网上找到这么一个表达式(?=.*[A-Z])(?=.*[0-9])(?=.*[!@;:])
为什么这种写法表示 ”至少”
疑问7: 这俩种写法是不是道理一样 ?
const paragraph = '111a23';
const regex = /.(?<=[a-z])./;
const found = paragraph.match(regex);
console.log(found);
const paragraph = '111a23';
const regex = /.(?<=.*[a-z])./;
const found = paragraph.match(regex);
console.log(found);
(?<=.*[a-z])
是要找到一个“位置”,这个位置前面可以匹配上.*[a-z]
。在111a23
里,这个位置显然在a
的后面。/.(?<=.*[a-z])/
,在这个位置前面的一个字符,'a'
/(?<=.*[a-z])./
,在这个位置后面的一个字符,'2'
/.(?<=.*[a-z])./
,这个位置前后各一个字符,'a2'
/(?<=.*[a-z])/
,这个位置可以找到,所以匹配时成功的。然而没有匹配任何字符。''
前瞻断言
语法为:
x(?=y)
,它表示“仅在后面是 y 的情况匹配 x”。后瞻断言
前瞻断言允许添加一个“后面要跟着什么”的条件判断。
后瞻断言也是类似的,只不过它是在相反的方向上进行条件判断。也就是说,它只允许匹配前面有特定字符串的模式。
语法为:
后瞻肯定断言:
(?<=y)x
, 匹配 x, 仅在前面是 y 的情况。后瞻否定断言:
(?<!y)x
, 匹配 x, 仅在前面不是 y 的情况。