我正在尝试替换所有不匹配给定正则表达式模式的字符。虽然它适用于匹配,但我似乎无法使多部分正则表达式模式与否定一起使用。
[^\d.-]
在删除所有非数字和 .- 字符方面工作正常,但对于十进制数仍然不够好,所以我制作了以下模式:
^[0-9]+(.[0-9]{1,2})?$
但是,我不知道如何否定它以使其在 .replace 中工作。有任何想法吗?我假设这同样适用于所有其他模式,例如:^[a-z0-9._%+-]+@[a-z0-9.-]+\.[a-z]{2, 6}$
谢谢!
对十进制有效的示例输入:
1.1
1.00
1.23
23123981239.2
2
-1
示例替换:
1.a4 => 1.4
44.44.4 => 44.444
qweqwe55.3 => 55.3
最佳答案
您可以通过拆分/合并来完成。分隔符将是模式:^.*?(-?\d+(?:\.\d+)?)|\D+
。
交替的第一部分到达第一个数字(可以是单个数字)。由于我把号码描述放在一个捕获组中,所以这部分成功后,只返回捕获的内容。
请注意,如果字符串至少包含一个数字,则可以确定第一部分将是第一个成功匹配的部分(因为它在交替中排在第一位)。 ^
anchor 阻止它在以后成功。
第二部分匹配所有非数字。
然后你只需要用一个空字符串连接结果。
let strings = [
"1.a4",
"44.44.4",
"qweqwe55.3",
"44.44.4.4.3333.5",
"-44.44.4.4.3333.5",
"-44.44.4.4.3333.5-",
"1.1",
"1.00",
"1.23",
"23123981239.2",
"2",
"-1",
].map(str => str.split(/^.*?(-?\d+(?:\.\d+)?)|\D+/).join('') );
console.log(strings)
关于javascript - 否定十进制数正则表达式模式以便用替换去除它,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56817145/