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

时间:2014-04-15 04:00:52

标签: javascript regex

尝试从Chrome用户代理中删除版本,格式为" Chrome / 34.0.1847.116"。

这是有效的:

userAgent.match(/.*Chrome.*?([\d|\.]*)\s/i);

这不起作用(我试图让它运转起来):

var versionRegularExpression = new RegExp('.*'+'Chrome'+'.*?([\d|\.]*)\s', 'i');
userAgent.match(versionRegularExpression);

我必须错误地格式化我的新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';

2 个答案:

答案 0 :(得分:4)

当您使用RegExp对象而不是RegEx文字时,您还需要转义\

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

此外,Chrome不需要连接,它可以是单个字符串文字的一部分,就像这样

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

作为Paulpro points out in the comments section,当您使用字符类时,|将被视为允许的字符之一,而不是OR运算符。所以,你不需要它

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

引自MDN's RegExp page

  

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

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

答案 1 :(得分:2)

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

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