gpt4 book ai didi

javascript - 正则表达式:捕获组不是从一开始就进行否定前瞻

转载 作者:行者123 更新时间:2023-11-28 07:36:52 27 4
gpt4 key购买 nike

我已经在 J​​avascript 中实现了一个正则表达式,它可以匹配来自 Safari 而不是来自 iPad 的 navigator.userAgent 字符串:

/^(?!.*Mobile).*Safari/i

我的问题是,进行匹配时会返回整个字符串:

var pattern = /^(?!.*Mobile).*Safari/i;

var pc = "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/534.57.2 (KHTML, like Gecko) Version/5.1.7 Safari/534.57.2";

var ipad = "Mozilla/5.0 (iPad; CPU OS 6_1_2 like Mac OS X) AppleWebKit/536.26 (KHTML, like Gecko) Version/6.0 Mobile/10B146 Safari/8536.25";

ipad.match(pattern); // Returns null
pc.match(pattern); // Returns ["Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/534.57.2 (KHTML, like Gecko) Version/5.1.7 Safari"]

我在最后一行想要的只是返回:

["Safari"]

我做了一些研究,我知道你可以通过执行 (?:term) 或 (?is:term) 从正则表达式中删除捕获组性质,但它甚至不使用负向先行编译(至少在 Safari 中)。我还尝试在比赛结束时用括号捕获“Safari”,但它返回数组内的第二个元素。

有谁知道如何在仅正则表达式中完成此任务?

提前致谢。

最佳答案

我没有找到仅返回 [“Safari”] 的方法,但我发现对于识别浏览器(这是我的目标),使用模式对象中的 test() 方法要好得多。

一些例子:

/^(?!.*(ipad|chrome)).*safari.*$/i.test(navigator.userAgent); // true for Safari
/^(?!.*(ipad|chrome)).*windows.*safari.*$/i.test(navigator.userAgent); // true only for Safari in Windows
/iPad/i.test(navigator.userAgent); // true only for iPad

关于javascript - 正则表达式:捕获组不是从一开始就进行否定前瞻,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28499433/

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