javascript - 否定十进制数正则表达式模式以便用替换去除它

标签 javascript regex

我正在尝试替换所有不匹配给定正则表达式模式的字符。虽然它适用于匹配,但我似乎无法使多部分正则表达式模式与否定一起使用。

[^\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/

相关文章:

javascript - 滚动灯箱画廊

Python/Pandas - 从地址中删除街道号码

javascript - 似乎无法 trim 所有前导空格 - JavaScript 或 jQuery

javascript - Kendo ui 股票图表在 IE9 和 Mozilla 中不可见?

javascript - 在旧浏览器上使用 Fetch 的 ReactJS

javascript - JS 检查深层对象属性是否存在

javascript - 如何使用jQuery获取gmail类型的进度条

regex - selenium 正则表达式,例如 id=regexp :. * 不起作用

JavaScript 正则表达式 : How to split Regex subexpression matches in to multi-dimensional string arrays?

regex - 为什么 Vim 替换命令 `:s/\([a-zA-Z]\)\([a-zA-Z]\)/\1\2/g` 没有删除 `a b c d` 行上的所有空格