JavaScript RegExp:match,但不';捕获
有一千个正则表达式的问题,所以我道歉,如果这已经涵盖。我确实先看了 鉴于以下模式:JavaScript RegExp:match,但不';捕获,javascript,regex,Javascript,Regex,有一千个正则表达式的问题,所以我道歉,如果这已经涵盖。我确实先看了 鉴于以下模式: (?:/|-)[0-9]{2}$ 以及以下字符串: str1 = '65/65/65' str2 = '65/65/6565' 比赛内容如下: str1 = '/65' // expected '65' str2 = '' // as I expected 我打算与?:匹配,但不包括/或-。什么是符合我期望的正确正则表达式?通常,这将通过查找来完成: /(?<=[-\/])[0-9]{2}$/
(?:/|-)[0-9]{2}$
以及以下字符串:
str1 = '65/65/65'
str2 = '65/65/6565'
比赛内容如下:
str1 = '/65' // expected '65'
str2 = '' // as I expected
我打算与?:匹配,但不包括/或-。什么是符合我期望的正确正则表达式?通常,这将通过查找来完成:
/(?<=[-\/])[0-9]{2}$/
/(?由于Javascript中没有lookback可用,只需将所需部分包装成:
看
注:(?:\/-)
可以用@anubhava注释的[\/-]
替换。没有后顾之忧,但有排他性匹配(?:
),因为它不会失败。问题是它将作为整体匹配的一部分包含在内(结果的索引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
在我看来,它不像是一个有效的正则表达式,你可能应该避开/
?使用[\/-]([0-9]{2})$
并抓取匹配的组#1anubhava、adeneo和Jonny 5,太棒了!+1这确实是JS中最好(最简单)的解决方案。很高兴你喜欢它anubhava:)啊——在我提交答案之前,你击中了我的所有要点!干得好Jonny(?:…)
被称为非捕获组。我没听说过“独占匹配”这个词。@nhahdh您是对的。排他性匹配是我所说的,主要是因为它更容易从舌头上滚下来,而且匹配被排除在结果之外并不错误。我想我并没有说这是一个技术术语——插入语只是为了澄清和支持我所引用的内容。如果我称之为非捕获组,我不会使用括号。在任何情况下,使用标准参考可能会更好,但有时我喜欢有点不同。此外,就透视而言,在法语中它不被称为“非捕获组”:
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