我仍在学习正则表达式,我需要删除字符串中的所有字符,除了数字(0-9),仅首先遇到点(。)和否(-)(如果出现在字符串的第一个索引上)
所以基本上,如果我有一个字符串“ -12,3asd45,we-678.90.45”,它应该给我“ -12345678.9045”
这是我当前的代码,但是问题是我只想排除(-)如果它出现在字符串的第一个索引上,当前它排除所有出现的(-):
value = val.replace(/[^-0-9.]/g , '');
答案 0 :(得分:2)
用(?!^)-
替代字符集(对字符串的开头进行负向超前搜索,后跟-
):
const val = "-12,3asd45,we-678.90"
console.log(val.replace(/[^0-9.-]|(?!^)-/g, ''));
要另外删除除小数点以外的所有小数,请匹配组中第一个.
之后的所有内容,并使用回调函数将该组中的所有句点替换为空字符串:
const val = "-12,3asd45,we-678.90.0.0.0"
const value = val
.replace(/[^0-9.-]|(?!^)-/g, '')
.replace(/^([^.]*\.)(.*)/, (_, g1, g2) => g1 + g2.replace(/\./g, ''));
console.log(value);