亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

如何在JavaScript正則表達式中訪問匹配的組?

如何在JavaScript正則表達式中訪問匹配的組?

如何在JavaScript正則表達式中訪問匹配的組?我想使用正則表達式匹配字符串的一部分,然后訪問該帶括號的子字符串:var myString = "something format_abc"; // I want "abc"var arr = /(?:^|\s)format_(.*?)(?:\s|$)/.exec(myString);console.log(arr);     // Prints: [" format_abc", "abc"] .. so far so good.console.log(arr[1]);  // Prints: undefined  (???)console.log(arr[0]);  // Prints: format_undefined (!!!)我究竟做錯了什么?我發現上面的正則表達式代碼沒有任何問題:我測試的實際字符串是這樣的:"date format_%A"報告“%A”未定義似乎是一種非常奇怪的行為,但它與此問題沒有直接關系,所以我開了一個新的,為什么匹配的子字符串在JavaScript中返回“undefined”?。問題是console.log它的參數就像一個printf語句,因為我正在記錄的字符串("%A")有一個特殊的值,它試圖找到下一個參數的值。
查看完整描述

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);

}


查看完整回答
反對 回復 2019-05-23
?
至尊寶的傳說

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);


查看完整回答
反對 回復 2019-05-23
?
弒天下

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()了。


查看完整回答
反對 回復 2019-05-23
  • 3 回答
  • 0 關注
  • 1019 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號