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()
是<select>
的文字,但是没有文字。它行不通。 this
是 <select>
元素
不,我没有发布完整的代码。 $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 用于精确匹配具有特殊字符的多个单词