【问题标题】:Match Regex: [everything before number], [number]匹配正则表达式:[数字之前的所有内容]、[数字]
【发布时间】:2015-01-22 22:16:34
【问题描述】:

我在一堆变化很大的字符串上使用.match()。我想从字符串中获取括号内的最后一个数字,然后从那里获取之前的所有内容。比如:

1 serving  (57.0 g)
1 slice, small (2" x 2-1/2" x 1-3/4")  (32.0 g)

变成一个数组:

['1 serving', '57.0 g']
['1 slice, small (2" x 2-1/2" x 1-3/4")', '32.0 g']

各种字符串的列表:http://regex101.com/r/jJ5sF3/1

我一直在努力编写一个捕捉这一点的正则表达式。

【问题讨论】:

  • 最简单的解决方案.*\((.*)\)

标签: javascript jquery regex match


【解决方案1】:

使用这种模式

(.*\S)\s*\(([^()]+)  

Demo

(               # Capturing Group (1)
  .             # Any character except line break
  *             # (zero or more)(greedy)
  \S            # <not a whitespace character>
)               # End of Capturing Group (1)
\s              # <whitespace character>
*               # (zero or more)(greedy)
\(              # "("
(               # Capturing Group (2)
  [^()]         # Character not in [^()]
  +             # (one or more)(greedy)
)               # End of Capturing Group (2)

【讨论】:

    【解决方案2】:

    试试正则表达式

    /(.*?)\s*\(([.\d\sg]*?)\)\s*$/gmi
    
    • (.*?) - 将最后一个 () 集合之前的所有字符分组
    • \s*\( - 分隔文本内容后的空格和(
    • ([.\d\sg]*?) 将最后一个 () 中的内容分组

    【讨论】:

    • /(.*?)\s*\(([.\d\sg]*?)\)?\s*$/gmi 这将匹配他提供的测试链接上的每一行
    【解决方案3】:
    (.*)\s(\([^)]*\))
    

    试试这个。查看演示。

    http://regex101.com/r/jJ5sF3/3

    var re = /(.*)\s(\([^)]*\))/g;
    var str = '71 oz (28.4 g)\n1 slice, small (2" x 2-1/2" x 1-3/4") (32.0 g)\n1 slice, small (29.0 g)\n81 oz (28.4 g)\n1 pita, large (6-1/2" dia) (64.0 g)\n21 cup, crumbs (45.0 g)\n61 oz (28.4 g)\n1 cup (108.0 g)\n61 oz (28.4 g)\n1 cup, crumbs (45.0 g)\n41 oz (28.4 g)\n1 serving (57.0 g)\n1 100 g (100.0 g)\n71 oz (28.4 g)\n1 slice, small (2" x 2-1/2" x 1-3/4") (32.0 g)\n1 slice, small (29.0 g)\n81 oz (28.4 g)\n1 pita, large (6-1/2" dia) (64.0 g)\n181 oz (28.4 g)\n21 cup, crumbs (45.0 g)\n61 oz (28.4 g)\n1 cup (108.0 g)\n131 oz (28.4 g)\n1 cup, crumbs (45.0 g)\n1 serving (50.0 g)\n1 100 g (100.0 g) \n1 slice, small (2" x 2-1/2" x 1-3/4") (32.0 g) \n1 slice, small (29.0 g) \n1 pita, large (6-1/2" dia) (60.0 g) \n21 cup, crumbs (45.0 g) \n1 cup (108.0 g) \n131 oz (28.4 g) \n61 oz (28.4 g) \n1 cup, crumbs (45.0 g) \n41 oz (28.4 g) \n1 serving (50.0 g) \n1 100 g (100.0 g';
    var m;
    
    while ((m = re.exec(str)) != null) {
    if (m.index === re.lastIndex) {
    re.lastIndex++;
    }
    // View your result using the m-variable.
    // eg m[0] etc.
    }
    

    【讨论】:

      【解决方案4】:

      试试这个正则表达式字符串,我可以根据你的情况在 regex101 中运行它。

      /(.+)\s\((.+)\)/g
      

      【讨论】:

        猜你喜欢
        • 2023-03-08
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-09-20
        • 1970-01-01
        • 2019-02-15
        • 2016-01-14
        • 1970-01-01
        相关资源
        最近更新 更多