1

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

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

4 回答 4

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)
于 2013-02-17T08:49:00.630 回答
0
/\((.*?)\)/.exec( '7 (6578) + 57842' )[1]
于 2013-02-17T08:44:06.313 回答
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)
于 2013-02-17T08:44:28.573 回答
0

您可能不需要g选项。在这里摆弄

或者

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

if (found) {
    var found1 = found[1];
    alert(found1);
}
于 2013-02-17T08:47:31.297 回答