3 回答

TA貢獻1815條經驗 獲得超6個贊
您可以像這樣訪問捕獲組:
var myString = "something format_abc";
var myRegexp = /(?:^|\s)format_(.*?)(?:\s|$)/g;
var match = myRegexp.exec(myString);
console.log(match[1]); // abc
如果有多個匹配,您可以迭代它們:
var myString = "something format_abc";
var myRegexp = /(?:^|\s)format_(.*?)(?:\s|$)/g;
match = myRegexp.exec(myString);
while (match != null) {
// matched text: match[0]
// match start: match.index
// capturing group n: match[n]
console.log(match[0])
match = myRegexp.exec(myString);
}

TA貢獻1789條經驗 獲得超10個贊
這是一種方法,您可以使用它來獲得每個匹配的第n個捕獲組:
function getMatches(string, regex, index) {
index || (index = 1); // default to the first capturing group
var matches = [];
var match;
while (match = regex.exec(string)) {
matches.push(match[index]);
}
return matches;
}
// Example :
var myString = 'something format_abc something format_def something format_ghi';
var myRegEx = /(?:^|\s)format_(.*?)(?:\s|$)/g;
// Get an array containing the first capturing group for every match
var matches = getMatches(myString, myRegEx, 1);
// Log results
document.write(matches.length + ' matches found: ' + JSON.stringify(matches))
console.log(matches);

TA貢獻1818條經驗 獲得超8個贊
關于上面的多匹配括號示例,我在找不到我想要的內容之后在這里尋找答案:
var matches = mystring.match(/(?:neededToMatchButNotWantedInResult)(matchWanted)/igm);
在看了上面帶有while和.push()的稍微復雜的函數調用之后,我突然意識到問題可以用mystring.replace()代替非常優雅(替換不是重點,甚至沒有完成,CLEAN,第二個參數的內置遞歸函數調用選項是?。?/p>
var yourstring = 'something format_abc something format_def something format_ghi';
var matches = [];
yourstring.replace(/format_([^\s]+)/igm, function(m, p1){ matches.push(p1); } );
在此之后,我認為我不會再使用.match()了。
添加回答
舉報