【问题标题】:get value from second pair of brackets, ignore data from first pair从第二对括号中获取值,忽略第一对中的数据
【发布时间】:2017-08-02 13:28:16
【问题描述】:

我正在寻找一种从第二对括号中获取值的方法。

这是一个例子: var foo = "酒吧 - (鸡尾酒) - (醉酒);

现在我需要值“drunk”,而不是值“cocktails”。

我设法从第一对中获取了价值,但仍在努力从第二对中获取数据。

这是我提取第一个值的代码:

 var foo = "bar - (cocktails) - (drunk)";
 chosenfoo = foo;
 filterOut  = /\((.*)\)/i;
 var strippedFoo=  chosenfoo.match(filterOut)[1];
 $('#foobarfield').val(strippedFoo);

我太勇敢了,认为将数字 1 更改为 2 就能解决问题。 :)

当值是“bar - (cocktails)”时,我会做对,就像“cocktails”一样,但是对于前面给出的带有两对括号的 var,这段代码的结果值是:

鸡尾酒)-(喝醉了

不完全是我想要的:(

有人可以帮我解决这个问题吗?

【问题讨论】:

  • 第二对还是最后一对括号?
  • 在这种情况下是第二对。尽管如此,瞄准最后一个也可以解决这个问题。

标签: jquery regex extract


【解决方案1】:

看下面的例子

var foo = "bar - (cocktails) - (drunk)";
var strippedFoo=  foo.match(/\((.*?)\)/gi)[1].replace(/\(|\)/g, "");;
alert(strippedFoo)
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>

【讨论】:

  • 哦该死的..是的..好吧..我认为它可以在正则表达式中完成,但看到这个解决方案就在我面前:p Tnx 一百万非常清楚答案与解决方案
  • @George 很高兴我能提供帮助。
【解决方案2】:

你可以通过两个改变得到你想要的:

  • 为全局匹配(多个匹配)添加/g,否则它会在第一次匹配时停止
  • 添加 ? 表示(基本上)“可能的最短匹配”

如:

/\((.*?)\)/gi

更改为 /g 后,返回的是匹配数组,因此第一个是 [0],第二个是 [1]

片段:

var foo = "bar - (cocktails) - (drunk)";
chosenfoo = foo;
filterOut  = /\((.*?)\)/gi;
var strippedFoo=  chosenfoo.match(filterOut)[1];
$('#foobarfield').text(strippedFoo);
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div id='foobarfield'></div>

【讨论】:

  • 好的,这非常接近我想要得到的结果,但由于某种原因,它在结果中添加了括号。所以现在我将 (cocktails) 和 (drunk) 作为单独的值,那么我该如何调整它以在没有括号的情况下获得“鸡尾酒”和“醉酒”?不要误会我的意思,当我只针对原始代码的第一个目标时,我确实得到了“鸡尾酒”......那么这里有什么不同?
  • 我可能会选择.replace,但似乎这不是你想要的,所以我正在寻找非捕获组并为你预测。目前尚不清楚为什么 JS 包含括号,而我觉得(例如)C# 不会。
【解决方案3】:

您正在匹配第一个括号和最后一个括号之间的所有内容。 像这样修复你的正则表达式

/\((.*?)\)/gi

你应该得到 2 次捕获

【讨论】:

    【解决方案4】:

    你可以用这个得到最后一个括号:

    \((?!.*\().*\)
    

    即使最后有一个不完整的括号(只有一个()),你也可以获得最后一个完整的括号:

    \((?!.*\(.*\)).*?\)
    

    DEMO

    更新以匹配括号的内容:

    \((?!.*\(.*\))(.*?)\)
    

    【讨论】:

    • 此代码还返回带有括号的值,如“(鸡尾酒)”和“(醉酒)”......我需要这些没有括号本身。
    • 您的代码与更新后的答案完全相同。
    猜你喜欢
    • 1970-01-01
    • 2015-01-18
    • 1970-01-01
    • 1970-01-01
    • 2021-11-27
    • 1970-01-01
    • 2021-07-19
    • 2021-12-25
    • 1970-01-01
    相关资源
    最近更新 更多