2013-02-17 97 views
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); 

但它與括號一起返回。我只想要括號內的文字。 任何幫助,將不勝感激。謝謝。

回答

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) 
+0

謝謝。這工作完美。 – 2013-02-17 09:17:17

0
/\((.*?)\)/.exec('7 (6578) + 57842')[1] 
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) 
0

您可能不需要g選項。 fiddle here

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

if (found) { 
    var found1 = found[1]; 
    alert(found1); 
} 
相關問題