JavaScript正则表达式用百分号替换所有数字

时间:2018-01-13 20:48:31

标签: javascript regex

我必须删除所有带字符串百分号的数字。

例如,

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

3 个答案:

答案 0 :(得分:1)

您可以添加一个可选的非捕获组(?:\.\d+)?,用于检查点和一个或多个数字。最后,您可以添加*以匹配零个或多个空格。

<强>解释

  • 匹配可选括号\(?
  • 匹配一个或多个数字\d+
  • 可选的非捕获组,用于匹配点和一个或多个数字(?:\.\d+)?
  • 匹配可选空格?
  • 匹配百分号[{1}}
  • 匹配可选的结束父母%
  • 匹配零个或多个空格\)

\(?\d+(?:\.\d+)? ?%\)? *

&#13;
&#13;
*
&#13;
&#13;
&#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