Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/node.js/35.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript RegEx-在句点后包含特定的数字_Javascript_Node.js_Regex - Fatal编程技术网

Javascript RegEx-在句点后包含特定的数字

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)。斜杠(/)前的第一个值是整数或小数。如果序列包含斜杠,则后面的数字也是整数或小数。所有值均为正值 这个正则表达式的要点是

我有类似的字符串;上半场进球1.5/2。开头的文本可以是任何内容,因此不能依赖于它作为正则表达式的一部分,因为它会发生变化。我想做的是匹配末尾的数字序列。测试样本应为:

  • 五,
  • 0.5/1
  • 2.5/3
  • 147
序列可以包含斜杠,也可以不包含斜杠。如果它包含斜杠,后面必须有一个值-整数或小数。小数点前的值(如果有)可以是任意位数-\d+,但后面的值必须为0或5-(0 | 5)。斜杠(/)前的第一个值是整数或小数。如果序列包含斜杠,则后面的数字也是整数或小数。所有值均为正值

这个正则表达式的要点是,我需要它只匹配一次。这是我使用的正则表达式:

(\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+个数字进行处理,但它确实匹配。如果您将其修改为不匹配,我将接受您的答案