我必须删除所有带字符串百分号的数字。
例如,
str = "test 12% test" -> "test test"
str = "test 12 % test" -> "test test"
str = "test 12% test" -> "test test"
str = "test 1.2% test" -> "test test"
现在我无法弄清楚如何修复最后一个 - 它是带点的数字。我目前的正则表达式是这样的:
name = name.replace(/\d+ ?% ?/g, "");
其他情景
str = "test 1.2%,test" -> "test ,test" // space is optional after %
str = "test (1.2%) test" -> "test test" // space is optional after %
str = "test 1.2%" -> "test" or "test " // space could be left after test if easier
答案 0 :(得分:1)
您可以添加一个可选的非捕获组(?:\.\d+)?
,用于检查点和一个或多个数字。最后,您可以添加*
以匹配零个或多个空格。
<强>解释强>
\(?
\d+
(?:\.\d+)?
?
%
\)
*
&#13;
答案 1 :(得分:1)
您可以使用[]
方括号指定要匹配的组。
这里我们正在使用
\d
:数字\.
:文字.
\s
:空白
const strings = [
"test 12% test",
"test 12 % test",
"test 12% test",
"test 1.2% test",
"test whitespace",
"test 12 test",
"test 1.2%,test",
"test (1.2%) test",
"test 1.2%",
]
strings.forEach(
string =>
console.log(string, string.replace(/\s\(?[\d\.\s]+\%\)?\s*/g, ' ').trim())
)
<script src="https://codepen.io/synthet1c/pen/KyQQmL.js"></script>
答案 2 :(得分:0)
这将获得您的输出
查找[^\S\r\n]*(?:\d+(?:\.\d*)?|\.\d+)\s*%[^\S\r\n]*
替换
https://regex101.com/r/EcbAXV/1
格式化
[^\S\r\n]* # Trim horizontal whitespace
(?: # Valid number formats to find
\d+
(?: \. \d* )?
| \. \d+
)
\s* # Optional whitespace
% # Literal percent
[^\S\r\n]* # Trim horizontal whitespace