javascript - 如何使用正则表达式从字符串中提取特定字符

标签 javascript node.js regex

我将有以下输入,我计划从中提取单位
(预期输出,例如:glkgmll)和数量(如果存在)(最后输入中的 20)

  • 0,5g
  • 500l
  • 1000kg
  • 20,5ml
  • 20x0,50l (1 l = 1,70 €) zzgl. 3,10€ Pfand

  • 如果是简单的情况,我正在执行以下操作
    输入:500g
    console.log("500g".replace(/ *\([^)]*\) */g, "") // remove brackets
          .replace(/[0-9]/g, "") // remove number eg. 500
          .replace(/\s/g, ""))
      
    
    输出:g (作品)
    输入:0,5g
    console.log("0,5g".replace(/ *\([^)]*\) */g, "") // remove brackets
      .replace(/[0-9]/g, "") // remove number eg. 500g
      .replace(/\s/g, ""))
        
    
    输出:,g (休息)
    输入:20x0,50l (1 l = 1,70 €) zzgl. 3,10€ Pfand
      console.log("20x0,50l (1 l = 1,70 €) zzgl. 3,10€ Pfand".replace(/ *\([^)]*\) */g, "") // remove brackets
          .replace(/[0-9]/g, "") // remove number eg. 500g
          .replace(/\s/g, ""))
    
    输出:x,lzzgl.,€Pfand (休息)

    最佳答案

    而不是使用 replace ,您可能想使用 match ,这将返回一个匹配对象。
    Mozilla Article

    正则表达式模式:
    对于匹配值和单位:

    ([\d,\.]+)\s*(g|kg|l|ml)
    
    最后一组可以添加更多单位。
    例子:
    "20x0,50l (1 l = 1,70 €) zzgl. 3,10€ Pfand".match(/([\d,\.]+)\s*(g|kg|l|ml)/)
    
    returns
    (3) ...:
        0: "0,50l" // full match
        1: "0,50" // value
        2: "l" // unit
        ...
    
    仅匹配单位(虽然这有点不必要,但前面的正则表达式同时匹配第 1 组中的值,第 2 组中的单位):
    (?<=[\d,\.]+)\s*(g|kg|l|ml)
    
    对于匹配数量:
    ([\d,\.]+)(?:x|\*)
    
    例子:
    "20x0,50l (1 l = 1,70 €) zzgl. 3,10€ Pfand".match(/([\d,\.]+)(?:x|\*)/)
    
    returns
    (2) ...:
        0: "20x" // full match
        1: "20" // quantity
        ...
    

    编辑:进一步详细说明我的评论
    var units = ["g", "kg", "l", "ml"];
    var re = new RegExp(`([\\d,\\.]+)\\s*(${units.join("|")})`);
    
    然后使用 re 进行匹配:
    "20x0,50l (1 l = 1,70 €) zzgl. 3,10€ Pfand".match(re)
    
    工作方式相同,但更易于维护。

    关于javascript - 如何使用正则表达式从字符串中提取特定字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/65396007/

    相关文章:

    javascript - 选择具有 href 属性且不以字符串开头的元素

    javascript - 在 Firebase Cloud Functions 中使用 Google Vision API 时出现类型错误

    php - 我如何将 preg_match 与字母数字和 unicode 接受一起使用?

    正则表达式以 a-e-i-o-u 的顺序匹配元音

    javascript - 当可观察数组被修改时如何触发函数

    javascript - 如何从 sqlalchemy jsonify 对象?

    javascript - 我应该将服务器端监听器放在 io 或 socket.io 的套接字上吗?

    node.js - 来自 NodeJS 或 mongoose 的 mongodump/mongorestore

    javascript - Vinyl-fs(gulp 文件流)在触发回调或 promise 之前未完成 .dest 写入

    python - 如何使用 html2text/BeautifulSoup python 删除 [font] 标签