您的正则表达式具有匹配字符串开头和结尾的锚点,因此它不足以匹配多个匹配项。使用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