JavaScript RegEx:匹配,但不捕获

时间:2014-09-17 16:18:26

标签: javascript regex

关于SO有一千个正则表达式问题,所以如果已经涵盖了这个问题我会道歉。我先看了。

给出以下模式:

(?:/|-)[0-9]{2}$

以下字符串:

str1 = '65/65/65'
str2 = '65/65/6565'

比赛是:

str1 = '/65' // expected '65'
str2 = ''    // as I expected

?:的意图是匹配,但不包括 / - 。什么是正确的正则表达式来满足我的期望?

3 个答案:

答案 0 :(得分:8)

由于Javascript中没有可用的后备,只需将所需的部分包装成capturing group

var str =  '65/66/67';

if(res = str.match(/(?:\/|-)([0-9]{2})$/)) {
  console.log(res[1]);
}

请参阅fiddle

注意:(?:\/|-)可以替换为{@ 3}} [\/-],例如@anubhava评论。

答案 1 :(得分:1)

通常,这将通过lookbehind完成:

/(?<=[-\/])[0-9]{2}$/

可悲的是,JavaScript并不支持这些。

相反,因为你知道&#34;额外位&#34;的长度。 (即一个字符,-/),它应该足够简单.substr(1)

答案 2 :(得分:1)

没有看后面,但有独家匹配(?:),因为它不会失败。问题是它将作为整体匹配的一部分(结果的索引0)。因此,最好的替代方法是捕获您想要的部分。在您的示例中,可以通过围绕括号中的数字匹配来完成。

var re   = /(?:[/-])([0-9]{2})$/,
    str1 = '12/34/56',
    str2 = '12/34/5678';

var res1 = str1.match(re);  // will want to use res1[1], not res1[0]  
var res2 = str2.match(re);  // null returned