我想在编程中,“逆”是什么意思并不总是很清楚。
为了仅根据您提供的示例提出一个解决方案,我将提供一个与 Vince 所提供的非常相似的解决方案。我很难通过重复捕获组来编写既匹配您需要的模式又捕获可能任意数量的数字的正则表达式。而且我不确定这是否以某种合理的方式可行(也许其他人可以)。但是两步法应该是直截了当的。
需要注意的是,我怀疑您指的是 JavaScript 的 replace 函数,它是 String 对象的成员,而不是 jQuery replaceWith 和 replaceAll 函数,指的是“jQuery 替换函数”。后者是“Dom 操作”功能。但是,如果我误解了,请纠正我。
例如,根据一些假设的输入,您可以使用
<b>var numeric_raw = jQuery('input.textbox').attr ('value').replace (/[^0-9.]/g, "")</b>
从文本字段中输入的值中删除所有不是数字或句点的字符;那么你可以使用
<b>var numeric_str = numeric_raw.replace (/^[0]*(\d+\.\d{1,2}).*$/, "$1")</b>
此处指定的类与文斯的回答中指定的类之间的区别在于我包括过滤前导 0。需要注意的是,在 Vince 的第一个 reg ex 中,可能有一个额外的“/”——但也许它有一个我没有理解的目的。
关于“逆”,理解您的初始查询的一种方法是您正在寻找与您提供的表达式相反的表达式。需要注意的是,虽然您提供的表达式 (/[0-9]+(.[0-9]{1,2})?/) 确实匹配整数和带有最多两位小数的十进制数,但它也匹配任何单个数字——因此,对于给定的输入字符串,它可能会识别出一个可能无法想象的匹配。该表达式没有锚('^'、'$'),因此可能允许多个可能的匹配。例如,在字符串“1.111”中,“1.11”和“1”都与您提供的模式匹配。
在我看来,与您的模式不匹配的任何字符串匹配的一种模式如下,或者至少在大多数情况下可以这样:
/^(?:(?!.*[0-9]+(\.[0-9]{1,2})?).*)*$/
- 如果有人可以识别出精确的“反向”模式,请随意 - 我在理解如何解释前瞻时遇到了一些麻烦,至少对于某些细微差别。
这依赖于当今 JavaScript 支持的“负前瞻”功能。您可以参考几个 stackoverflow 帖子以获取更多信息(例如,正则表达式和否定整个字符组),并且可以在 Internet 上找到多个讨论“前瞻”和“后瞻”的资源。
我想这个答案相对于已经给出的答案有些多余——我可能已经评论了原始海报的帖子或文斯的答案(而不是写下我的至少部分答案),但我还不能发表评论!