Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/443.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/wix/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
JavaScript RegExp:match,但不';捕获_Javascript_Regex - Fatal编程技术网

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