2017-08-16 83 views
-3

我有以下字符串:正則表達式的幫助 - 提取的第二場比賽

mmSuggestDeliver(0,新的Array( 「名稱」, 「類別」, 「關鍵字」, 「偏見」, 「擴展」 ,「ID」),新陣列(新陣列(「Advance Auto Parts Inc.」, 「Aktien」,「982516 | US00751Y1064 | AAP ||」,「85」,「」, 「Advance_Auto_Parts | 982516 | ),新Array(「iShares中國大型股UCITS ETF」, 「Anzeige」,「」,「100」,「」,「http://suggest-suche-A0DK6Z」)),2,0);

我想提取用粗體書寫的安全名稱。

這是我嘗試:

var regEx = new RegExp(/"\w+\|/, 'g'); 
 
var text = 'mmSuggestDeliver(0, new Array("Name", "Category", "Keywords", "Bias", "Extension", "IDs"), new Array(new Array("Britvic Plc", "Aktien", "A0HMX9|GB00B0N8QD54|||", "85", "", "Britvic|A0HMX9|1|15568"),new Array("<div class=\"pull-left mright-5 image_logo_ishares2\"></div><div class=\"pull-left\">iShares MSCI AC Far East ex-Japan UCITS ETF</div>", "Anzeige", "", "100", "", "http://g.finanzen.net/ishares-suggest-suche-A0HGV9")), 2, 0);'; 
 
var securityName = regEx.exec(text); 
 

 
console.log(securityName);

只有第一場比賽A0HMX9|被退回。我想要第二個。我怎樣才能做到這一點?

謝謝!

+0

我建議你看看你的表情,向後看和向前看。下面是一些開始使用的材料:https://developer.mozilla.org/en-US/docs/Web/JavaScript/Guide/Regular_Expression –

+0

使用'var securityNames = text.match(/「\ w + \ |/g );' –

+0

爲什麼文檔告訴我添加全局標誌作爲第二個參數? https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Global_Objects/RegExp#grouping-back-references – user2145393

回答

1

const regex = /"\w+\|/g; 
 
const str = `mmSuggestDeliver(0, new Array("Name", "Category", "Keywords", "Bias", "Extension", "IDs"), new Array(new Array("Advance Auto Parts Inc.", "Aktien", "982516|US00751Y1064|AAP||", "85", "", "Advance_Auto_Parts|982516|1|13715"),new Array("iShares China Large Cap UCITS ETF", "Anzeige", "", "100", "", "http://suggest-suche-A0DK6Z")), 2, 0);`; 
 
let m; 
 

 
while ((m = regex.exec(str)) !== null) { 
 
    // This is necessary to avoid infinite loops with zero-width matches 
 
    if (m.index === regex.lastIndex) { 
 
     regex.lastIndex++; 
 
    } 
 

 
    // The result can be accessed through the `m`-variable. 
 
    m.forEach((match, groupIndex) => { 
 
     console.log(`Found match, group ${groupIndex}: ${match}`); 
 
    }); 
 
}

+0

感謝這個精心製作的示例! – user2145393

1

由於Wiktor的Stribiżew建議in comments,你可能想String.prototype.match而不是RegExp.prototype.exec

var regEx = new RegExp(/"\w+\|/, 'g'); 
 
var text = 'mmSuggestDeliver(0, new Array("Name", "Category", "Keywords", "Bias", "Extension", "IDs"), new Array(new Array("Britvic Plc", "Aktien", "A0HMX9|GB00B0N8QD54|||", "85", "", "Britvic|A0HMX9|1|15568"),new Array("<div class=\"pull-left mright-5 image_logo_ishares2\"></div><div class=\"pull-left\">iShares MSCI AC Far East ex-Japan UCITS ETF</div>", "Anzeige", "", "100", "", "http://g.finanzen.net/ishares-suggest-suche-A0HGV9")), 2, 0);'; 
 
var securityName = text.match(regEx); 
 

 
console.log(securityName);

RegExp.prototype.exec將返回一個唱在每次執行時匹配(請參閱Nata Zakharchuk's answer),而String.prototype.match會返回所有匹配項(前提是您設置了g修飾符)。

+0

謝謝。看來我的錯是添加g標誌作爲第二個參數。我在mozilla doc中做了這個。奇怪這似乎是錯誤的嗎? https://developer.mozilla.org/en/docs/Web/JavaScript/Reference/Global_Objects/RegExp#grouping-back-references – user2145393

+0

不,g代碼在你的代碼中很好(我更新了我的代碼片段以使用你使用的語法) 。在代碼片段下方看到我的解釋。 – pchaigno

+0

啊,那是問題所在。我認爲整個時間我的正則表達式是錯誤的;)< – user2145393