gpt4 book ai didi

Javascript:正则表达式匹配/替换未按预期工作

转载 作者:行者123 更新时间:2023-12-02 17:35:48 24 4
gpt4 key购买 nike

给出以下代码:

    $('.numericOnly').change(function(e){
var val = $(this).val();
var replacedVal = val.replace(/^.*([0-9]+(\.[0-9]+)?).*$/, '$1');
console.log(val);
console.log(replacedVal);
});

当输入值为“234”时,控制台打印“234”和“4”,当输入值为“234.8”时,控制台打印“8”。

问题:为什么?
目标:我想匹配一个整数,丢弃任何错误的输入。

例如如果 val 为“234.4”,则保留“234.4”;如果 val 有任何错误的符号,例如“a234.4b”,我想保留“234.4”;如果 val 有不明确的条目,例如“234.4.5”或“234.4x23.5”,我想保留第一个可匹配的数字实例(两种情况下均为“234.4”)。

最佳答案

这是因为.*是贪婪的。发生的情况是整个字符串首先与 .* 匹配。然后就会发生回溯的情况。这基本上意味着.*一次返回一个字符,以便正则表达式的其余部分可以匹配。

长话短说,使用这样的东西,这是懒惰的:

val.replace(/^.*?([0-9]+(\.[0-9]+)?).*$/, '$1');
<小时/>

描述:

当输入为234时, .*匹配所有内容,然后返回一个字符。在这一点上,.*正在匹配23([0-9]+(\.[0-9]+)?).*$正在匹配4 ,这是完全可以接受的,也是比赛在这里结束的原因。

当您使用.*?时,它首先尝试匹配 0 个字符,然后 ([0-9]+(\.[0-9]+)?).*$ 。剩余部分与整个数字匹配,并且正则表达式再次满足。简单来说,这就是懒惰和贪婪的区别。

<小时/>

或者,您也可以将数字与 [0-9]+(?:\.[0-9]+)? 相匹配。并将匹配项放入 replacedVal .

关于Javascript:正则表达式匹配/替换未按预期工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22639367/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com