我敢肯定有人问过类似的问题,但我的需求似乎也有一点扭曲,所以我无法让它完全按预期工作。
使用 javascript 我想去除所有字符的字符串,除非它匹配某些模式。 IE。我想保留所有数字和表达式,例如 %
、million
、billion
或 320b
。
我打算匹配所有应该被剥离的字符,即
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%.
到目前为止,我一直停留在 (?:(?![0-9]).)+
但这只给了我
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%.
编辑
实际上我刚刚意识到我可以使用以下正则表达式突出显示正确的位置
(?:[0-9]|[0-9]?million|[0-9]?billion|[0-9]?%)
但是我该如何将这些匹配项连接成一个字符串呢?我的最终目标是
3 million billion 20123 30billion 30%
使用 javascript。
最佳答案
您可以使用此匹配 + 连接
操作:
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 个以上的数字(可选)后跟%
关于javascript - 正则表达式捕获除数字和单词列表之外的所有字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59033502/