javascript - 正则表达式捕获除数字和单词列表之外的所有字符
问题描述
我敢肯定有人问过类似的问题,但我的需求似乎也有一些变化,所以我无法让它完全按照应有的方式工作。
使用 javascript 我想去除所有字符的字符串,除非它匹配某些模式。即,我想保留所有数字和表达式,例如,%
或even 。million
billion
320b
我打算匹配所有应该被剥离的字符,即
我想标记所有非 numb 3 ers,但不标记Million 、Bill 、20123等。问题是我也不想标记300 亿或30 %等。
到目前为止,我被困住了,(?:(?![0-9]).)+
但这只会给我
我想标记所有非数字3,但不是百万、十亿、20123等。问题是我也不想标记300亿或30 %。
编辑
实际上,我刚刚意识到我可以使用以下正则表达式突出显示正确的位置
(?:[0-9]|[0-9]?million|[0-9]?billion|[0-9]?%)
但是我如何将这些匹配项连接成一个字符串?我的最终目标是
3 million billion 20123 30billion 30%
使用 JavaScript。
解决方案
您可以使用以下match + join
操作:
s = `I want to mark all non numb3ers but not million, billion, 20123 etc. The thing is I also don't want to mark 30billion for instance or 30%`;
var r = s.match(/\d*[mb](?:illion)?\b|\d+%?/ig).join(' ');
console.log(r);
//=> 3 million billion 20123 30billion 30%
正则表达式详细信息:
\d*
: 匹配 0 个或多个数字[mb]
: 匹配m
或b
(?:illion)?
: 可选匹配illion
\b
: 断言一个单词边界|
: 或者\d+%?
: 匹配 1+ 位可选地后跟%
推荐阅读
- python - 无法导入相对于正在运行脚本的目录的模块
- javascript - 反应地图对象包含数组
- r - 有没有办法根据值自动生成组内不同的行组合?
- encryption - Asp.Net Core Jwt access_token 签名和加密
- ssas - 如何解决行级安全性能影响
- airflow - 覆盖气流中的雪花钩
- virtual-environment - 没有 Python 的 Mac 上的虚拟环境
- powershell - powershell:根据名称将文件复制到子目录
- javascript - 使用 Vue javascript 模块时导入
- python - 如何修复 ValueError:时间数据 '18/02/2020 20:14:31' 与 Python 中的格式 '%d/%m/%y %H:%M:%S' 不匹配?