jQuery:无法使用 RegExp 精确搜索“+3.00”或“-3.00”

Posted

技术标签:

【中文标题】jQuery:无法使用 RegExp 精确搜索“+3.00”或“-3.00”【英文标题】:jQuery: Unable to use RegExp to search for exactly "+3.00" or "-3.00" 【发布时间】:2021-07-20 19:16:15 【问题描述】:

我正在努力寻找正确的正则表达式来匹配末尾带有加号 (+) 或减号 (-) 的数字。

我有一个从 0.00- 到 40.00- 和 0.00+ 到 40.00- 的数字列表。我正在使用以下 RegExp 过滤掉不匹配的记录:

    $("#MySelectBox").change(function() 
    var filter = $(this).val()
    // If the list item does not contain the numbers phrase fade it out
    if ($(this).text().search(new RegExp('\\b'+filter+'\\b', "i")) < 0) 
      $(this).hide();
     else 
      $(this).show();
    

但是,它会同时显示 + 和 - 数字。例如:如果 filter = 3.00+ 那么它将返回 3.00+ 和 3.00- 值。

任何想法如何获得完全匹配?

【问题讨论】:

\+3\.00 匹配 +3.00 但不匹配 -3.00。同样\-3\.00 匹配-3.00。这就是你想要的吗? 是的,完全正确。但我想要 \+3\.00 或 \-3\.00。什么是正确的正则表达式?因为我的号码并不总是 3...但可以是 0-40 之间的任何数字。 那么,您想要介于 -40 和 +40 之间的任何数字吗?做一个数字比较不是更容易吗?这看起来像 XY problem 我相信数字可以在文本中的任何位置,而不仅仅是-3.00 对于这样的问题,如果您可以提供输入值以及对这些字符串的测试结果应该是什么,它会大量提供帮助. 【参考方案1】:

[\+-]\d1,2\.00

将匹配 +-,后跟一位或两位数字 (\d1,2),然后是 .00

但是,RegEx 没有“大于 40”的逻辑。它们只匹配模式。

有一些有用的工具可以帮助你,比如Rexegpal

【讨论】:

非常感谢!我已经尝试过了,但它不会返回任何结果。我已将问题更新为更准确。您将如何在我的代码上实施您的解决方案? 那为什么不直接$(this).text().includes(filter)呢? 好吧,我确实尝试了包含(和包含)但它不起作用。 啊,但是$(this).text()&lt;select&gt;的文字,但是没有文字。它行不通。 this&lt;select&gt; 元素 不,我没有发布完整的代码。 $this.text 指的是$('.number_field').each(function() 【参考方案2】:

所以你的简介:

检查字符串匹配模式:“+xx.xx”或“-xx.xx” 仅限 -40 或 +40 之间的数字 忽略超出范围的结果

这可能是实现您想要的结果的好方法。

注意:(1) 不确定是否要强制执行最低点,(2) 肯定有多种方法可以达到您的结果,这只是一种。

const regex = /^[\-\+]\d+\.*\d*$/;

const tests = ["41", "20", "+20", "-20", "+20.00", "-20.20", "20.20"];

const passedTests = tests.filter(number => 

  const parsedNumber = Number.parseFloat(number);
  const isValid = !!number.match(regex) && parsedNumber > -40 && parsedNumber < 40;
  
  console.log(`Test $number, result: $isValid`);
  
  return isValid;
);

console.log(passedTests);

【讨论】:

谢谢。我已将问题更新为更准确。您将如何在我的代码上实施您的解决方案?【参考方案3】:

要精确匹配末尾带有加号 (+) 或减号 (-) 以及从 0.00- 到 40.00- 和 0.00+ 到 40.00+ 的数字,您可以使用:

^(?:(?:[0-9]|[123]\d)\.\d\d|40\.00)[+-]$
^ 字符串开始 (?: 交替的非捕获组| (?:[0-9]|[123]\d) 匹配数字 0-9 或数字 10 - 39 \.\d\d 匹配 . 和 2 位数字 0-9 |或者 40\.00匹配40.00 )关闭群 [+-] 匹配 +- $字符串结束

Regex demo

javascript中你可以使用

const regex = /^(?:(?:[0-9]|[123]\d)\.\d\d|40\.00)[+-]$/;

如果该值不是字符串中的唯一值,您可以从带有单词边界\b 的模式开始,并在右侧声明一个空白边界(?!\S)

\b(?:(?:[0-9]|[123]\d)\.\d\d|40\.00)[+-](?!\S)

Regex demo

【讨论】:

以上是关于jQuery:无法使用 RegExp 精确搜索“+3.00”或“-3.00”的主要内容,如果未能解决你的问题,请参考以下文章

Javascript RegExp 用于精确匹配具有特殊字符的多个单词

MySQL REGEXP数字精确匹配不起作用

如何在 JQuery 自动完成中开始精确匹配?

RegExp

Rails Regexp::IGNORECASE 同时将精确选项与数字选项匹配也包含在结果中

Javascript RegExp + 单词边界 + unicode 字符