您的正則表達式具有匹配字符串開頭和結尾的錨點,因此它不足以匹配多個匹配項。使用String.match
與正則表達式g
標誌(全球改性劑)更新代碼:
var userIn = 'Cu(NO3)2(CO2)3';
var inPar = userIn.match(/\([^)]*\)/g).map(function(s){ return s.substr(1); });
inPar; //["NO3)", "CO2)"]
如果你需要舊IE支持:Array.prototype.map
polyfill
或者不polyfills:
var userIn = 'Cu(NO3)2(CO2)3';
var inPar = [];
userIn.replace(/\(([^)]*\))/g, function(s, m) { inPar.push(m); });
inPar; //["NO3)", "CO2)"]
以上匹配的(
和捕獲一系列零個或多個非)
字符,然後是)
並將其推送到inPar
陣列。
第一個正則表達式基本上是相同的,但是使用整個匹配,包括開頭的(
圓括號(稍後通過映射數組除去),而不是捕獲組。
從我承擔收盤)
括號預計將在生成的字符串的問題,否則,這裏有沒有右括號更新的解決方案:(使用s.slice(1, -1)
)
對於第一種解決方案:
var inPar = userIn.match(/\([^)]*\)/g).map(function(s){ return s.slice(1, -1);});
對於第二溶液(\)
捕獲組以外):
userIn.replace(/\(([^)]*)\)/g, function(s, m) { inPar.push(m); });
打漿到時鐘。 +1指出匹配而不是替換和全局修飾符 –
從這個問題來看,我認爲'''結束符'應該在返回的字符串中。此外,我寧願'match.slice(1,-1)'去除開始和結束括號,而不是將不必要的正則表達式放入它。 –
切片上的好電話!我會更新代碼來使用它。我不確定爲什麼Rygh2014會這麼做),但是在你的代碼和我的代碼之間,這應該是一個相當明顯的變化。 – SpenserJ