Regex:从一开始就对捕获组进行了负面展望
Regex: Negative lookahead with capturing group not from beginning
我在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",但它返回了数组中的第二个元素。
有人知道我如何在一个唯一的正则表达式中实现这一点吗?
提前谢谢。
我没有找到只返回["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 regexp,用于验证一开始没有http的url
- 当我尝试恢复JWPlayer视频时,它从一开始就开始了
- Regex:从一开始就对捕获组进行了负面展望
- 背景视频是由ScrollMagic一开始的最后一个场景触发的
- 谷歌地图在一开始正确加载后会变成灰色
- OWL 轮播图片一开始尺寸不合适
- 如何使正则表达式从一开始就匹配模式
- keylistener没有'一开始不起作用
- 我的PDF文件一开始没有被选中,只有在ie浏览器中才被选中
- Angular JS页面一开始无法正常加载
- 如何让我的循环开始从一开始错误检测后
- 为什么不需要一开始就进行淘汰赛验证
- Backbone.js + GUI:我是否必须用视图和模型构建GUI,或者我是否从一开始就用html加载它
- 《Redux-saga》一开始并不能奏效
- 工具提示器一开始不能正常工作
- 如何一开始不启用toggle类
- 组织结构图从一开始就崩溃了
- 有没有更好的方法来创建一个四分之一的列表,从给定的四分之一开始倒数
- 获得一个引导按钮下拉,从一开始就保持打开(在页面加载时)
- 单击以旋转一开始方向错误