小括号()在正则表达式的应用中代表“捕获分组”
什么是捕获分组呢,在Python中string::match() 得出的结果中,会将正则表达式里()中匹配的结果单独存放在一个数组中,第一个()里的结果放在数组的第一位,第二个()里匹配的结果放在数组的第二位,以此类推。这样我们就能按照自己的需要得到自己最想要的结果了。
import re
mail = "123456@163.com"
pattern = "([\w]*)@([a-zA-Z0-9\.]*)"
print(re.search(pattern, mail).group(0,1,2))
在这个例子中,你就可以直接拿到邮箱中的邮箱账号和域名了。
- (?:pattern) 表示非捕获分组 意思就是这个分组不做保存,是不想要的结果
import re
mail = "123456@163.com"
pattern = "(?:[\w]*)@([a-zA-Z0-9\.]*)"
print(re.search(pattern, mail).group(0,1))
得到的结果就只有域名"163.com" 了
- (?=pattern) 表示正向肯定预查 就是匹配(?=pattern)中前面的结果,比如下面这个例子中,我只想要 "@163.com"前面的"123456"
var mail = "123456@qq.com,123456@163.com";
mail.match(/[\d]*(?=@163.com)/g);
- (?!pattern) 表示正向否定预查 就是与上面那个相反,不匹配pattern的才是想要的结果
var a = "world.xml"; // warld.xls, word.doc, world.doc";
a.match(/[\w]*(?!.xls)/g);
则会剔除掉“warld.xls”这个
- (?<=pattern) 表示反向肯定预查 就是匹配以(pattern)开头的结果
例如,"(?<=95|98|NT|2000)Windows
"能匹配"2000Windows
"中的"Windows
",但不能匹配"3.1Windows
"中的"Windows
"。
- (?<!pattern) 表示反向否定预查
反向否定预查,与正向否定预查类似,只是方向相反。例如"
(?<!95|98|NT|2000)Windows
"能匹配"3.1Windows
"中的"Windows
",但不能匹配"2000Windows
"中的"Windows
"。
下面举一个html中获取div background 图片地址的综合应用例子
在html中一个div的background设置为
.div-image{
background: rgba(0, 0, 0, 0) url("http://127.0.0.1:5501/asset/parameteritem/btn_insert.png") no-repeat scroll 0% 0% / 100% 100% padding-box border-box;
}
我用JQuery想要取出url的地址,则可以使用
$(".div-image").css("background").match(/(?<=url\(\")[\S]*(?=\"\))/g);
取出的结果就是 “http://127.0.0.1:5501/asset/parameteritem/btn_insert.png” 了。