gpt4 book ai didi

javascript - 为什么这个正则表达式不能在 javascript 中工作(在 perl 中工作)

转载 作者:行者123 更新时间:2023-12-02 15:44:12 25 4
gpt4 key购买 nike

我正在尝试匹配以下字符串,

Apache/2.2.6 (Unix) mod_ssl/2.2.6 OpenSSL/0.9.7a DAV/2 PHP/5.2.13

使用以下正则表达式,

(?:Apache.(\w+))?.*(?:OpenSSL.([\w.]+))?.*(?:PHP.([\w.]+)) ?

由于XXX/version对可能不存在,所以我在每个非捕获匹配组后面添加了?

但只匹配第一个版本字符串,

var re = /(?:Apache.([\w.]+))?.*(?:OpenSSL.([\w.]+))?.*(?:PHP.([\w.]+))?/;
var captures = re.exec('Apache/2.2.6 (Unix) mod_ssl/2.2.6 OpenSSL/0.9.7a DAV/2 PHP/5.2.13');
console.log (captures);

// captures[1] = '2.2.6'
// captures[2] = undefined
// captures[3] = undefined

有什么想法吗?删除“?”有效,但我不知道为什么(与 perl 一起工作)

编辑

“有效”的有效正则表达式可以是(没有“?”),

(?:Apache.(\w+)).*(?:OpenSSL.([\w.]+)).*(?:PHP.([\w.]+))

最佳答案

.* 是贪婪的,所以我并不惊讶它没有捕获第一组之外的数据。令我惊讶的是它在任何地方都有效。让这些包罗万象的人懒惰并取消非捕获组和捕获组的分组,它似乎有效:

(?:Apache.)(\w+)?.*?(?:OpenSSL.)([\w.]+)?.*?(?:PHP.)([\w.]+)?

关于javascript - 为什么这个正则表达式不能在 javascript 中工作(在 perl 中工作),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32357576/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com