正则表达式,?<= 和 ?= 的用法
正则表达式,?<= 和 ?= 的用法。
本文主要记录实现:指定字符开头,和指定字符结尾的中间字符串。
能够实现上述功能的就是 ?<= 和 ?= 表达式。举个例子来说:
我要查找 html 标签中的 href 地址,网页的源代码如下:
<a href="wwww.weijian21.top">微见博客</a>
通过下面的正则表达式就能够正确匹配到 wwww.weijian21.top
(?<=(href=")).{1,200}(?=(">))
分来开分析,该正则表达式的含义:
1. (?<=(href=")>)意思就是以 href=" 开头的字符串
2. .{1,200} 一般网址都是 200长度了,这其实已经很长了
3. (?=(">)) 意思:以 "> 结尾的字符串。
其实这里说:以 href=” 开头的 或者 “> 结尾的字符串,个人认为是容易形成误解的。
因为: ^ 和 $ 表示字符串的开头和结尾,而且是包含开头和结尾的。个人更能理解的表述方式为:href=” 后面 和 “> 前面的字符串,当然这就不包含 href=” 和 “>本身了。
这其实是正则表达式的位置指定:
(?=exp) 匹配exp前面的位置
(?<=exp) 匹配exp后面的位置
(?!exp) 匹配后面跟的不是exp的位置
(?<!exp) 匹配前面不是exp的位置
记录一下比较难以书写的正则表达式:
至少6个字符,并且至少一个字母和一个数字:
/^(?=.*[A-Za-z])(?=.*\d)[A-Za-z\d]{6,}$/
至少6个字符,至少一个字母,一个数字和一个特殊字符:
/^(?=.*[A-Za-z])(?=.*\d)(?=.*[$@$!%*#?&])[A-Za-z\d$@$!%*#?&]{6,}$/
. 表示除了换行符之外的所有字符。
* 表示匹配 前面的表达式 0 次或者 多次
正则表达式中的贪婪模式和非贪婪模式
正则表达式默认是贪婪匹配的,也就是说:他是尽可能大的匹配到对应的字符串
比如:
. 表示单个字符匹配任意多次 贪婪模式
。? 表示单个字符匹配一次, 非贪婪模式
a.*b
读如下字符串进行匹配:
aabab 将会匹配到整个字符串。 这就是贪婪匹配
但是有时候我们需要非贪婪匹配。也就是尽可能少的匹配,只要符合规则,只需要在后面加上一个 ? 就可以
a.*?b
用同样的字符串进行匹配 aabab 将会匹配到 aab和ab
*? 重复任意次,但尽可能少重复
+? 重复1次或更多次,但尽可能少重复
?? 重复0次或1次,但尽可能少重复
{n,m} 重复n到m次,但尽可能少重复
{n,}? 重复n次以上,但尽可能少重复
2021-09-02 23:44:28
user 阅读(242) 评论(0)
标签:正则表达式,正则 ?<= 和 ?= 用法,正则表达式以什么开头以什么结尾,位置指定,贪婪模式
分类:typescript javascript
很赞哦! (0)