我在Javascript中实现了一个正则表达式,它可以匹配来自Safari的navigator.userAgent字符串,而不是来自iPad:
/^(?!.*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"在匹配结束时,它返回数组内的第二个元素。
有谁知道如何才能在正则表达式中实现这一目标?
提前致谢。
答案 0 :(得分:0)
我没有找到只返回[“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