2017-08-16 33 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