【问题标题】:Regex to remove numbers and others characters正则表达式删除数字和其他字符
【发布时间】:2019-01-02 09:58:50
【问题描述】:

我想使用正则表达式从我的打字稿字符串中删除一些数字和字符。我想我已经接近了,但我错过了一些东西。

这是我拥有的弦乐之王:

  1. [15620584560] - 产品名称(类型)
  2. [1256025] - 产品名称(测试+1)
  3. [12560255544220] - 产品名称

我想要什么:

产品名称

这里是我正在使用的正则表达式。

product_name = product_name.replace(/\[[0-9]+\]/,'');

【问题讨论】:

    标签: javascript regex typescript


    【解决方案1】:

    你可以使用

    .replace(/^\s*\[[0-9]+]\s*-\s*|\s*\([^()]*\)\s*$/g, '')
    

    regex demo

    正则表达式匹配两个备选方案(以| 分隔):

    • ^\s*\[[0-9]+]\s*-\s*:
      • ^ - 字符串开头
      • \s* - 0+ 个空格
      • \[ - 一个[
      • [0-9]+ - 1 位以上
      • ] - 一个 ] 字符
      • \s*-\s* - 一个 - 字符,包含 0+ 个空格
    • | - 或
    • \s\([^()]*\)\s*$:
      • \s* - 0+ 个空格
      • \( - 一个(
      • [^()]* - 除了 () 之外的 0+ 个字符
      • \) - 一个)
      • \s* - 0+ 个空格
      • $ - 字符串结束。

    JS 演示:

    var strs = ['[15620584560] - product name (type)','[1256025] - product name (test+1)','[12560255544220] - product name'];
    var reg = /^\s*\[[0-9]+]\s*-\s*|\s*\([^()]*\)\s*$/g;
    for (var s of strs) {
      console.log(s, '=>', s.replace(reg, ''));
    }

    【讨论】:

    • 谢谢,但我编译时出错:解析正则表达式时出错:正则表达式无效:/^\s*[[0-9]+]\s*-\s*| \s*(([^()]*)\s*$/: 未终止组
    • @JoeAllen 在\s* 之后有一个奇怪的(。它不在我的正则表达式演示中。很可能,当我在\s 之后手动添加* 时,它会悄悄进入模式。对不起。我添加了一个工作代码 sn-p。
    • 我没有复制正则表达式演示,我只是复制了stackoverflow示例。伟大的工作,它完美地工作!谢谢
    【解决方案2】:

    一种可行的方法是将输入字符串拆分为破折号,然后使用简单的正则表达式删除括号中的所有项:

    var input = '[15620584560] - product name (type)';
    var fields = input.split(/\]\s*-/);
    var result = fields[1].replace(/\s*\(.*?\)\s*/g, '').trim();
    console.log(result);

    【讨论】:

    • 有很多边缘情况可能会失败。但在没有此类信息的情况下,我将其作为一种潜在的解决方案提供。
    • 如果我的产品名称中包含“-”我想保留它:)
    • @JoeAllen 我将答案更新为在] - 上拆分,即右括号后跟一些可能的空格,然后是连字符。您的产品名称是否恰好有这个序列是值得怀疑的。
    猜你喜欢
    • 1970-01-01
    • 2018-12-03
    • 1970-01-01
    • 1970-01-01
    • 2016-05-26
    • 1970-01-01
    • 2014-11-07
    • 1970-01-01
    相关资源
    最近更新 更多