关于SO有一千个正则表达式问题,所以如果已经涵盖了这个问题我会道歉。我先看了。
给出以下模式:
(?:/|-)[0-9]{2}$
以下字符串:
str1 = '65/65/65'
str2 = '65/65/6565'
比赛是:
str1 = '/65' // expected '65'
str2 = '' // as I expected
?:的意图是匹配,但不包括 / 或 - 。什么是正确的正则表达式来满足我的期望?
答案 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