2016-11-30 41 views
1

我嘗試爲荷蘭車牌(kentekens)編寫一些正則表達式,the documentation非常清晰,我只想檢查它們的格式,而不是現在可能的實際字母字符。爲什麼我的正則表達式組量詞不起作用?

My regex (regex101)如下所示:

(([0-9]{1,2}|[a-z]{1,3})-([0-9]{2,3}|[a-z]{2,3})-([0-9]{1,2}|[a-z]{1,2})){8}/gi

然而,這沒有返回匹配,而

([0-9]{1,2}|[a-z]{1,3})-([0-9]{2,3}|[a-z]{2,3})-([0-9]{1,2}|[a-z]{1,2}/gi

確實

但是我喜歡檢查總長度以及。

JS演示片斷

const regex = /([0-9]{1,2}|[a-z]{1,3})-([0-9]{2,3}|[a-z]{2,3})-([0-9]{1,2}|[a-z]{1,2})/gi; 
 
const str = `XX-99-99 
 
2​ \t 1965​ \t 99-99-XX ​ 
 
3​ \t 1973​ \t 99-XX-99​ 
 
4​ \t 1978​ \t XX-99-XX ​ 
 
5​ \t 1991​ \t XX-XX-99 ​ 
 
6​ \t 1999​ \t 99-XX-XX ​ 
 
7​ \t 2005​ \t 99-XXX-9​ 
 
8​ \t 2009​ \t 9-XXX-99​ 
 
9​ \t 2006​ \t XX-999-X ​ 
 
10​ \t 2008​ \t X-999-XX ​ 
 
​11 \t ​2015 \t ​XXX-99-X`; 
 
let m; 
 

 
while ((m = regex.exec(str)) !== null) { 
 
    // This is necessary to avoid infinite loops with zero-width matches 
 
    if (m.index === regex.lastIndex) { 
 
     regex.lastIndex++; 
 
    } 
 
    
 
    // The result can be accessed through the `m`-variable. 
 
    m.forEach((match, groupIndex) => { 
 
     console.log(`Found match, group ${groupIndex}: ${match}`); 
 
    }); 
 
}

+0

PHP還是javascript? – chris85

+0

@ chris85項目是PHP,但要快速顯示問題,我收錄了一個js演示:) –

回答

4

這是因爲{8}量詞加入在末端將作用於先前的表達,在這種情況下,整個的正則表達式,因爲它包圍括號。 See here什麼匹配這個正則表達式。

爲了測試長度,使用這個表達式(?=^.{1,8}$)(([0-9]{1,2}|[a-z]{1,3})-([0-9]{2,3}|[a-z]{2,3})-([0-9]{1,2}|[a-z]{1,2}))它採用了先行以確保下列字符匹配^.{1,8}$,這意味着整個字符串應包含1和8之間的字符,可以將其調整到您的需要。

+0

有沒有辦法用正則表達式來做到這一點,還是我譴責使用'strlen'? –

+1

查看更新的答案。 –

+0

https://www.regex101.com/r/ohrsJc/4誰有興趣! –

相關問題