如何在JavaScript中正确格式化正则表达式

如何在JavaScript中正确格式化正则表达式,javascript,regex,Javascript,Regex,试图从Chrome用户代理中提取格式为“Chrome/34.0.1847.116”的版本 这是有效的: userAgent.match(/.*Chrome.*?([\d|\.]*)\s/i); 这不起作用(我正在努力让它起作用): 我的新RegExp格式一定不正确-有人能告诉我怎么搞砸了吗 完整用户代理是: var userAgent = 'Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Ch

试图从Chrome用户代理中提取格式为“Chrome/34.0.1847.116”的版本

这是有效的:

userAgent.match(/.*Chrome.*?([\d|\.]*)\s/i);
这不起作用(我正在努力让它起作用):

我的新RegExp格式一定不正确-有人能告诉我怎么搞砸了吗

完整用户代理是:

var userAgent = 'Mozilla/5.0 (Windows NT 6.3; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/34.0.1847.116 Safari/537.36';

使用
RegExp
对象而不是RegEx-literal时,还需要转义
\

new RegExp('.*'+'Chrome'+'.*?([\\d|\\.]*)\\s', 'i');
另外,
Chrome
不需要连接,它可以是单个字符串文本的一部分,如下所示

new RegExp('.*Chrome.*?([\\d|\\.]*)\\s', 'i');
因为,当您使用字符类时,
|
将作为允许的字符之一,而不是OR运算符。所以,你不需要它

new RegExp('.*Chrome.*?([\\d\\.]*)\\s', 'i');
引用

使用构造函数时,需要常规字符串转义规则(字符串中包含的特殊字符前面带有\时)。例如,以下是等效的:

var re = /\w+/;
var re = new RegExp("\\w+");

Chrome前后的匹配似乎毫无意义。您也不需要
|
或在字符类中转义
。我会用这个:

userAgent.match(/Chrome\/([\d.]*)/);

令人惊叹的!我会接受这个答案。知道我需要额外的转义斜杠非常有帮助。Downvoter,请告诉我出了什么问题。@thefourtheye我否决了,因为我误解了你答案中的第二句话。删除了向下投票,但我仍然认为字符类
[\d|\.]
是不寻常的,因为它匹配
字符没有真正的原因,所以还没有向上投票。它实际上与“RegExp对象”(我假设你指的是构造函数)没有任何关系。这与使用字符串文字语法有关,它还使用反斜杠作为转义序列的开头。@Paulpro您是对的:)我在答案中包含了这些信息。
userAgent.match(/Chrome\/([\d.]*)/);