簡體   English   中英

JavaScript RegExp:匹配,但不捕獲

[英]JavaScript RegExp: match, but don't capture

SO上有一千個正則表達式問題,所以如果已經涵蓋了這個問題我會道歉。 我先看了一下。

鑒於以下模式:

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

以下字符串:

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

比賽是:

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

我的意圖是?:匹配,但不包括/- 什么是正確的正則表達式來滿足我的期望?

由於Javascript中沒有可用的后台,只需將所需的部分包裝到捕獲組中

var str =  '65/66/67';

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

小提琴

注意: (?:\\/|-)可以替換為@anubhava評論的字符類 [\\/-]

通常,這將通過lookbehind完成:

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

遺憾的是,JavaScript並不支持這些。

相反,既然你知道“額外位”的長度(即一個字符,或者-/ ),它應該足夠簡單到.substr(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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM