请问下面正则表达式是什么意思

查看:115
本文介绍了请问下面正则表达式是什么意思的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

问 题

^.*(C:\\Windows\\(?:system32|syswow64)\\.*\.(dll|exe))$
请问上述表达式中的 "?:" 是什么意思, ? 不是表示 0 或 1 个吗, 怎么和冒号组合在一起了

解决方案

/^.*(C:\\Windows\\(?:system32|syswow64)\\.*\.(dll|exe))$/
上面应该是匹配路径的
(?:system32|syswow64)是捕获组,而且是非捕获型捕获组,表示后面紧跟system32|syswow64的匹配

举个例子:
var str = "C:\\Windows\\system32\\aaa.dll"; 
/^.*(C:\\Windows\\(?:system32|syswow64)\\.*\.(dll|exe))$/.exec(str)
结果为:
["C:\Windows\system32\aaa.dll", 
 "C:\Windows\system32\aaa.dll",
 "dll",
 index: 0,
 input: "C:\Windows\system32\aaa.dll"]

括号都表示捕获,可以看出正则中有三组大括号
1. (C:\\Windows\\(?:system32|syswow64)\\.*\.(dll|exe))
这是捕获型的组,结果会输出来
=》匹配结果: C:\Windows\system32\aaa.dll(结果中第2条)

2. (?:system32|syswow64)
带问号的都是非捕获型的组(还包括?! ?=),结果是不输出来的
=》匹配结果:无

3. (dll|exe)
这是捕获型的组,结果会输出来
=》匹配结果: dll(结果中第3条)

你可能发现了,整个匹配的结果中有两个C:\Windows\system32\aaa.dll,其实第1个是整个匹配的结果。

这篇关于请问下面正则表达式是什么意思的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆