我确定已经问过类似的问题,但我的需求似乎也有一些变化,因此我无法使其正常运行。
使用javascript,我要为所有字符去除字符串,除非它与某些模式匹配。即我想保留%
,million
,billion
或320b
之类的所有数字和表达式。
我打算匹配所有应删除的字符,即
我要标记所有非数字 3 但不标记百万,十亿, 20123 等。问题是我也不想标记例如 300亿或 30%。
到目前为止,我一直停留在(?:(?![0-9]).)+
上,但这只能给我
我要标记所有非数字 3 ,而不是百万,十亿或 20123 等。问题是我也不想标记 30 十亿,例如 30 %。
实际上我只是意识到我可以使用以下正则表达式突出显示正确的位置
(?:[0-9]|[0-9]?million|[0-9]?billion|[0-9]?%)
但是如何将这些匹配项合并为一个字符串?我的目标是
3 million billion 20123 30billion 30%
使用javascript。
答案 0 :(得分:2)
您可以使用以下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%
RegEx详细信息:
\d*
:匹配0个或多个数字[mb]
:匹配m
或b
(?:illion)?
:可以选择匹配illion
\b
:声明单词边界|
:或\d+%?
:匹配1个以上的数字,并可选地后面跟%