首页 > 解决方案 > 正则表达式捕获除数字和单词列表之外的所有字符

问题描述

我敢肯定有人问过类似的问题,但我的需求似乎也有一些变化,所以我无法让它完全按照应有的方式工作。

使用 javascript 我想去除所有字符的字符串,除非它匹配某些模式。即,我想保留所有数字和表达式,例如,%或even 。millionbillion320b

我打算匹配所有应该被剥离的字符,即

我想标记所有非 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。

标签: javascriptregexstringreplace

解决方案


您可以使用以下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]: 匹配mb
  • (?:illion)?: 可选匹配illion
  • \b: 断言一个单词边界
  • |: 或者
  • \d+%?: 匹配 1+ 位可选地后跟%

推荐阅读