Javascript RegEx-在句点后包含特定的数字
我有类似的字符串;上半场进球1.5/2。开头的文本可以是任何内容,因此不能依赖于它作为正则表达式的一部分,因为它会发生变化。我想做的是匹配末尾的数字序列。测试样本应为:Javascript RegEx-在句点后包含特定的数字,javascript,node.js,regex,Javascript,Node.js,Regex,我有类似的字符串;上半场进球1.5/2。开头的文本可以是任何内容,因此不能依赖于它作为正则表达式的一部分,因为它会发生变化。我想做的是匹配末尾的数字序列。测试样本应为: 五, 0.5/1 2.5/3 147 序列可以包含斜杠,也可以不包含斜杠。如果它包含斜杠,后面必须有一个值-整数或小数。小数点前的值(如果有)可以是任意位数-\d+,但后面的值必须为0或5-(0 | 5)。斜杠(/)前的第一个值是整数或小数。如果序列包含斜杠,则后面的数字也是整数或小数。所有值均为正值 这个正则表达式的要点是
- 五,
- 0.5/1
- 2.5/3
- 147
(\d(\.(0 | 5))?\/\d(\.(0 | 5)))|(\d\.(0 | 5))|(\d)
上面正则表达式的问题是我使用的示例字符串;上半场1.5/2的进球两次相配。在1.5和2.2上各一次。我现在将其更改为:
\d+(\(0 | 5))?(\/?\d+(\(0 | 5))?)?
这稍微好一点,但是如果我给测试样本的话;1.6/2,它将匹配6/2。这是因为前一个数字的小数部分是可选的。我不确定“回头客”在这里会否派上用场,我对他们没有太多经验。不幸的是,之前的文本是如此不可预测,否则我可以修剪字符串以只获得所需的子字符串&然后从字符串的开头匹配,但不能这样做。什么应该匹配什么不应该匹配的概述:
1 // Match
5.5 // Match
7.8 // No Match
0/0.5 // Match
147/147.5 // Match
2. // No Match
6.5/ // No Match
7.0/8 // Match
10.0 // Match
1./2.5 // No Match
5./6 // No Match
/157 // No Match
/4.5 // No Match
我已经尽力解释了,但如果您需要更多详细信息,我将在Node.js中提供它们,RegExp支持lookbehinds,您可以使用
/\b(?<!\d\.|\/)\d+(?:\.[05])?(?:\/\d+(?:\.[05])?)?$/
/\b(?)?
见
详细信息
\b
-单词边界
(?-当前位置左侧不允许有数字+点或斜线
\d+
-一个或多个数字
(?:\[05])?
-可选的
\。
-一个点
[05]
-0
或5
(?:\/\d+(?:\[05])?
-可选的
\/\d+
-a/
和1+位数
(?:\[05])?
-点的可选序列,然后是0
或5
$
-字符串结束
使用/\b(?,请参见否定的Lookbehind并不适用于所有浏览器:@Spirit我应该提到这是后端和节点,因此lookbehinds将work@WiktorStribiżew该正则表达式似乎运行良好。我刚刚将其编辑为:\b(?因此第二个值(如果是十进制值)将只匹配0或5。如果我有1./2
或1./2.5
或类似的内容,则它不起作用。我希望它不匹配,但它在斜杠后的值上匹配。这可以修改吗?回答很好!我想我遗漏了不应该匹配的1,尽管它是/147.5
。如果我把它放在斜杠p的位置ROCEED需要一个值,它将匹配该值。我希望它不会像正则表达式中看起来的那样,必须有1+个数字进行处理,但它确实匹配。如果您将其修改为不匹配,我将接受您的答案