如何在圆括号之间提取文字?

时间:2013-02-17 08:38:41

标签: javascript

我想在()括号内提取文本。字符串如下所示:它在

Some text: 5 (some numbers) + some more numbers
asdfkjhsd: 7 (6578) + 57842
djksbcuejk: 4 (421) + 354

我的javascript看起来像这样:

var fspno = document.getElementsByTagName("td")[142].innerText;
var allfsp = fspno.match();

我希望这个脚本收集数组括号内的所有数字。我用了

fspno.match(/\((.*?)\)/g);

但它带括号返回。我只想要括号内的文字。 任何帮助,将不胜感激。感谢。

4 个答案:

答案 0 :(得分:1)

javascript中无法同时提取所有群组的所有匹配项,因此您必须在循环中使用exec

re = /\((.+?)\)/g
found = []
while(r = re.exec(fspno))
    found.push(r[1])

或滥用String.replace来收集比赛:

re = /\((.+?)\)/g
found = []
fspno.replace(re, function($0, $1) { found.push($1)})

但是,在您的特定情况下,可以重写表达式,使其不包含组,并且可以与String.match一起使用:

re = /[^()]+(?=\))/g
found = fspno.match(re)

答案 1 :(得分:0)

/\((.*?)\)/.exec( '7 (6578) + 57842' )[1]

答案 2 :(得分:0)

最简单的方法是关闭g选项并在匹配项上获取[1]索引,例如:

fspno.match(/\((.*?)\)/)[1];

但如果找不到任何内容,那将返回错误,所以如果你不知道你是否会有一个带括号的部分,或者你可以使用这个成语:

(fspno.match(/\((.*?)\)/) || [,""])[1];

如果无法找到匹配项,将返回""

如果您知道需要g选项(即括号中可能有多个内容,而您想要全部内容),则可以使用:

var match, matches=[]; while (match = /\((.*?)\)/g.exec(s)) matches.push(match[1]);
// matches is now an array of all your matches (without parentheses)

答案 3 :(得分:0)

您可能不需要g选项。 fiddle here

var fspno = "7 (6578) + 57842";
var found = fspno.match(/\((.*?)\)/);

if (found) {
    var found1 = found[1];
    alert(found1);
}