js正则表达式

疑问1 :为什么这个结果是 a
image.png

疑问2: 这个我可以看懂
image.png

疑问3:这个也不明白,如果是null表示没找到,但是这个结果是空的字符串,表示找到了吗?

image.png

疑问4:这个嘞
image.png

疑问5:看了这个说明不是很理解 ,可以详细解释一下吗
image.png

疑问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);
阅读 2.7k
2 个回答

(?<=.*[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 的情况。

1./(?<=.*[a-z])/ 推荐名称-零宽度正回顾后发断言,所谓零宽,就是用来确定位置,但是本身不作为匹配结果。因此单独match的话并不会有结果
2.单独看/.*[a-z]/,表示任意字符出现0-n次,且跟着一个小写字母。"a","1a","11a","111a"满足,由于贪婪,理论上单独match这个正则应该只有"111a"。
3.再来看/.(?<=.*[a-z])/,零宽定位的位置可以看成是"111a"和"23"的中间,因此"."匹配的是这个位置的前一个字符,就是"a".
4.同理/(?<=.*[a-z])./,位置后面的第一个字符就是"2"
5.在同理/.(?<=.*[a-z])./,位置前后各匹配一个字符,就是"a2"
大概可以这么去理解

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题
宣传栏