【问题标题】:regex intermediate正则表达式中间体
【发布时间】:2018-05-25 00:51:52
【问题描述】:

我有一个格式如下的字符串:"SomeText ($4.56)"

我正在使用以下正则表达式 \${1}[0-9]+\.*[0-9]* 提取货币数据,但它包含 $ 符号。

我是中级并且理解这一点。

  • \$ 正在寻找美元符号
  • [0-9]+ 是后面的任意位数
  • \. 正在寻找小数
  • *[0-9]* 在小数点后找到零个或多个数字

我希望删除美元符号。我该怎么做?

提前致谢。

【问题讨论】:

  • 什么语言或工具?
  • javascript 使用 exec
  • 试试str.replace(/\$(\d+(?:\.\d+)?)\b/g, '$1')

标签: javascript regex


【解决方案1】:

这很简单...只需使用

看起来像这样:

\$([0-9]+\.*[0-9]*) 

组 1 将返回不带 $ 的货币。

【讨论】:

    【解决方案2】:

    您做得很好,但是使用正则表达式删除 JS 中的子字符串需要调用 .replace() 方法。正则表达式:

    \$(\d+(?:\.\d+)?)\b
    

    细分:

    • \$Macth 是一个真正的美元符号
    • ( 第一组抓包开始
      • \d+(?:\.\d+)? 匹配带有可选小数的数字序列
    • )捕获组结束
    • \b匹配一个单词边界

    JS代码:

    var str = "SomeText ($4.56)";
    console.log(str.replace(/\$(\d+(?:\.\d+)?)\b/g, '$1'));

    【讨论】:

    • 我同意并确实使用了它,但与我一起工作的人无法接受。希望这一切都在正则表达式中完成。
    • 嗯,都是正则表达式。
    【解决方案3】:

    将您想要的内容括在括号中以创建捕获组。

    \$(\d+\.\d{2})
    

    Demo

    var regex = /\$(\d+\.\d{2})/;
    var string = "SomeText ($4.56)";
    var matches = regex.exec(string);
    
    console.log(matches); // all matches
    console.log(matches[1]); // first capture group

    【讨论】:

      猜你喜欢
      • 2011-11-22
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-12-29
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多