2011-11-04 81 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