使用正则表达式提取值

时间:2015-02-01 18:17:30

标签: javascript regex

你好,某些文字模式在哪里:

some text Here +0.25(2)
some text Here 0.25(2.3)
some text Here 0.00(2.3)
some text Here -1.5(1.5)
...
some text Here param_1(param_2)

我需要提取两个值param_1param_2。如何使用regexpressions解决它? (需要Javascript)

param_1是数字包含+, - 或没有任何操作。 param_2是数字

2 个答案:

答案 0 :(得分:1)

([+-]?\d+(?:\.\d+)?)\((\d+(?:\.\d+)?)(?=\))

试试这个。参见demo.Grab捕获。

https://regex101.com/r/vD5iH9/25

var re = /([+-]?\d+(?:\.\d+)?)\(\d+(?:\.\d+)?(?=\))/g;
var str = 'some text Here +0.25(2)\nsome text Here 0.25(2.3)\nsome text Here 0.00(2.3)\nsome text Here -1.5(1.5)\n...\nsome text Here param_1(param_2)';
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.
}

编辑:

(.*?)\s([+-]?\d+(?:\.\d+)?)\((\d+(?:\.\d+)?)(?=\))

使用它来捕获所有三个组件。参见演示。

https://regex101.com/r/vD5iH9/28

答案 1 :(得分:1)

我假设你想要一个param_1的数组,然后是一个param_2的数组。

您可以使用两个简单的正则表达式完成此任务:

(捕捉param_1 s):

/[+-\d.]+(?=\([\d.]+\)$)/gm

param_1 demo

param_2's甚至更简单:

/[\d.]+(?=\)$)/gm

尝试完整jsFiddle demo

var param1 = str.match(/[+-\d.]+(?=\([\d.]+\)$)/gm);
var param2 = str.match(/[\d.]+(?=\)$)/gm);

param1现在是一个包含param_1的数组,param2用于param_2