我写了一个coldfusion正则表达式来匹配页面的源代码中的时间,它们在页面中分散,如下所示:
<span>10.30</span> stuff <span>10.45-11.15</span> other stuff <span>17.00</span>
我希望比赛是&#34; 10.30&#34; &#34; 10.45-11.15&#34;和&#34; 17.00&#34;。 相反,我得到&#34; 10.30&#34; &#34; 10.45&#34; &#34; 11.15&#34;和&#34; 17.00&#34;。
我试过了:
rematch("(\b[0-2][0-9]\.[0-5][0-9]\b)|(\b[0-2][0-9]\.[0-5][0-9]-[0-2][0-9]\.[0-5][0-9]\b)",mystring)
感谢您纠正错误!当然与小b和连字符有关。
答案 0 :(得分:3)
您可以在可选的非捕获组(?:...)?
的帮助下,使模式的一部分与范围的第二部分匹配,并注意您的正则表达式也匹配最多29小时,也可以得到纠正。
使用
\b(?:2[0-3]|[0-1][0-9])\.[0-5][0-9](?:-(?:2[0-3]|[0-1][0-9])\.[0-5][0-9])?\b
请参阅regex demo
<强>详情:
\b
- 领先的字边界(?:2[0-3]|[0-1][0-9])
- 2
后跟0
到3
或0
/ 1
的数字,后跟任意数字(=小时) )\.
- 一个文字点[0-5][0-9]
- 从0
到5
的数字后跟任意数字(=分钟)(?:-(?:2[0-3]|[0-1][0-9])\.[0-5][0-9])?
- 与-
匹配的可选非捕获组,然后是上面描述的相同模式... \b
- 一个尾随字边界。答案 1 :(得分:2)
我认为你不需要'或',只需按照以下方式选择范围:
\b[0-2]\d\.[0-5]\d(-[0-2]\d\.[0-5]\d)?\b
以下是JavaScript等效代码段:
var re = /\b[0-2]\d\.[0-5]\d(-[0-2]\d\.[0-5]\d)?\b/g;
var s = "<span>10.30</span> stuff <span>10.45-11.15</span> other stuff <span>17.00</span>";
console.log(s.match(re));