【问题标题】:RegEx help in JavaScript - extract second match [duplicate]JavaScript中的RegEx帮助-提取第二个匹配项[重复]
【发布时间】:2018-01-24 08:28:11
【问题描述】:

我有以下字符串:

mmSuggestDeliver(0, new Array("Name", "Category", "Keywords", "Bias", “扩展”,“ID”),新阵列(新阵列(“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);

我想提取以粗体书写的证券名称。

这是我尝试的:

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|。我想要第二个。我怎样才能做到这一点?

谢谢!

【问题讨论】:

标签: javascript regex


【解决方案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 修饰符)。

【讨论】:

  • 谢谢。看来我的错是将 g 标志添加为第二个参数。我让它像在 Mozilla 文档中一样。奇怪这似乎是错误的? developer.mozilla.org/en/docs/Web/JavaScript/Reference/…
  • 不,g 修饰符在您的代码中很好(我更新了我的 sn-p 以使用您使用的相同语法)。请参阅我在 sn-p 下方的解释。
  • 啊,这就是问题所在。我一直认为我的正则表达式是错误的;)
  • @user2145393 要我详细说明一些内容以接受答案吗?
  • 不,一切都很好。我无法在没有等待的情况下将您的答案作为 answert 检查......然后我忘记了。对不起!
【解决方案2】:

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

【讨论】:

  • 感谢这个精心制作的样本!
猜你喜欢
  • 2019-08-03
  • 2016-10-08
  • 1970-01-01
  • 2017-12-14
  • 2020-03-06
  • 2015-01-22
  • 2020-12-02
  • 1970-01-01
  • 2013-06-15
相关资源
最近更新 更多