2014-11-25 108 views
1

我在使用.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

我努力写抓住了这个正则表达式。

+0

最简单的解决'。* \((。*)\)'' – nhahtdh 2014-11-25 02:29:03

回答

2

使用这种模式

(.*\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) 
0

尝试像

/(.*?)\s*\(([.\d\sg]*?)\)\s*$/gmi 
正则表达式
  • (.*?) - 组中的最后()设置
  • \s*\(之前的所有字符 - 文本内容和(
  • ([.\d\sg]*?)组里面的内容后的空格分开最后的()
+0

/(.*?)\s*\(([.\d\sg]*?)\)?\s * $/gmi'这将匹配他提供的测试链接上的每一行 – 2014-11-25 02:36:29

0
(.*)\s(\([^)]*\)) 

尝试this.See演示。

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. 
} 
0

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

/(.+)\s\((.+)\)/g 
相关问题