2011-11-04 72 views
0

我正在使用XSLT與正則表達式:匹配exslt函數。該函數使用JavaScript正則表達式模式。所以我想穿越了3個一組數字1或5到7或9匹配直通23JavaScript正則表達式模糊

以下是正則表達式,我想出了:

(^[1-3]$|^[5-7]$|^[9-23]{1,2}$) 

此正則表達式不匹配具有任何價值。以下復圖案是良好僅少許程度:

(^[1-3]$|^[5-7]$|^9$|^[10-23]{2}$) 

雖然這與所有其他預期的號碼相匹配值除了14通19。爲什麼是這樣以及如何使正則表達式更好。順便說一句,我使用http://www.regextester.com/來測試模式匹配。

謝謝。

+0

乍一看,這個或操作員似乎很腥。它可能會執行'$ | ^'而不是'tokenGroup | otherTokenGroup',這是有道理的。 – Zirak

回答

0

你用字符串不是數字工作,所以14或19或20的數字字符串不是數字。

所以[10-23]{2}將匹配0-2,1,3或0,1,2,3兩次。注意失蹤的4-9。

(^[1-3]$|^[5-7]$|^9$|^1[0-9]$|^2[0-3]$) 
+0

謝謝,幫助我理解了爲什麼它沒有給出想要的結果。 – liv2luv

0

在正則表達式中,括號內的數字僅表示一個字符。嘗試:

^[1-3]$|^[5-7]$|^9$|^1[0-9]$|^2[0-3]$ 
2

括號包含字符,而不是字符串。試試這個:

^([1-35-79]|1[0-9]|2[0-3])$ 

編輯:測試它,它的工作原理。

var str=""; 
for (var i=0; i<30; i++) { 
    if (/^([1-35-79]|1[0-9]|2[0-3])$/.test(i+"")) str+=i+' ' 
} 
console.log(str); 

打印

1 2 3 5 6 7 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 
+0

謝謝你的快速回答。我在XSLT中使用了正則表達式模式,但是您的解決方案對我的理解很有幫助。 – liv2luv

0

將其轉換爲一個整數,試驗> 0和< 24和!= 4和!= 8。把事情簡單化。

+0

是的,這很簡單,也適用。我已經簡化了問題陳述,將其應用到問題上下文中。不同的觀點看待這個問題。謝謝 – liv2luv