Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/458.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

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/18.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 字符串替换所有非mach正则表达式_Javascript_Regex - Fatal编程技术网

Javascript 字符串替换所有非mach正则表达式

Javascript 字符串替换所有非mach正则表达式,javascript,regex,Javascript,Regex,这是我的javascript正则表达式:/^(\d+\.?\d{0,2})$/我的目标是根据它替换所有输入。可能吗?例如: 123a.12 => 123.12 aaa12aa => 12 12.aaa13 => 12.13 12.aaa => 12 12.555 => 12.55 12.... => 12 12. => 12 12.35.12.14 => 12.35 12.aaa.2.s.5 => 12.25 我正在使用str.rep

这是我的javascript正则表达式:
/^(\d+\.?\d{0,2})$/
我的目标是根据它替换所有输入。可能吗?例如:

123a.12 => 123.12
aaa12aa => 12
12.aaa13 => 12.13
12.aaa => 12
12.555 => 12.55
12.... => 12
12.    => 12
12.35.12.14 => 12.35
12.aaa.2.s.5 => 12.25

我正在使用str.replace(/^(\d+\.?\d{0,2})$/,“”)但没有成功

分步骤执行:首先替换任何不是数字的内容,然后修剪

函数getNum(输入,应为){
num=输入
.替换(/[^\d.]/g'')
.替换(/\.+$/,'')
.替换(/^\.+/,'');
console.log(输入+'=>'+num+'|'+预期值)
}
getNum('123a.12','123.12');
getNum('aa12aa','12');
getNum('12.aaa13','12.13');
getNum('12.aaa','12');
getNum('abcd.12','12');

getNum('abcd.efg.12.abcd.efg','12')当前示例的一个选项是使用交替选项来匹配非数字、点或空格字符,或匹配点后跟1+非数字,并断言其不以数字结尾

[^\d.\s]+|\.[^\d]+(?!\d)\b
[
“123a.12”,
“aaa12aa”,
“12.aaa13”,
“12.aaa”

].forEach(str=>console.log(str.replace(/[^\d.\s]+\.[^\d]+(?!\d)\b/g')这应该处理所有情况,除非一行中有两个句点

let myString = 'test1.0.test'
myStr.replace(/[^\d.-]/g,'').replace(/[^\d.-]|\.$/g, '')
// 1.0

您可以用占位符替换第一个
,我已经使用了
。然后,删除所有不是数字或占位符的字符。最后,将占位符替换为
。然后,删除超过小数点后2位的内容:

const num=(s)=>{
const clean=s.replace(“.”,“|”)。replace(/[^\d|]/g,”)。replace(“|’,”);
返回parseInt(干净*100)/100;
}
常数测试=[
“123a.12”,
“aaa12aa”,
“12.aaa13”,
“12.aaa”,
"12.555",
"12....",
"12.",
"12.35.12.14",
“12.aaa.2.s.5”
];

tests.forEach(test=>console.log(test+“=>”+num(test))
string.replace(/[^\d.]/g,”)
-替换任何不是数字或周期的字符。您可以使用
parseFloat('12.aaa13.replace(/[^\d.]/g,”)。toFixed(2)
12。aaa
应该是
12
,而不是
12。
@justin你说得对,我已经更新了答案。之后我必须只有两个小数comma@Justinas我添加了一个编辑以反映更新后的值。之后必须只有两个小数comma@IntoTheDeep在我的示例中,它按预期工作。这是我的
tests
数组中的第5个元素。如果我键入e,这是数字的有效输入,该怎么办?@into深“e”将从输入字符串中删除。是否接受“e”作为有效数字以从字符串中提取?这不起作用,因为当我在输入中键入时,它首先删除dot@IntoTheDeep如果您在用户键入时筛选输入,则这是另一个问题。这只处理完整的字符串。