当前位置: 首页 > 知识库问答 >
问题:

如何获取字符串中括号中的所有值,包括嵌套括号?

罗奇文
2023-03-14

期望的行为

我有一个输入验证,除其他外,测试长度(

我的输入接受降价,我想在长度计算中排除URL的长度。

例如,显示为:

这里有一个很长的链接,指向这篇关于Math.random()的文章

长度为57个字符,而实际代码长度为155个字符,即:

here is a very long link to this article on [Math.random()](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Math/random)

需要涵盖的场景包括:

文本和[一个降价链接](https://google.com)

text(和[括号内的标记链接](https://google.com))

这个问题是关于:

如何获取字符串中括号中的所有值,包括嵌套括号。

我试过的

我目前处理整个问题的方法是:

  1. 获取字符串中括号内的所有值

以下是我在第一部分的尝试:

01)

这个解决方案刚好得到第一个“匹配”,来源:https://stackoverflow.com/a/12059321

var text = "here is a (very) long link to this article on [Math.random()](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Math/random)";

var regExp = /\(([^)]+)\)/;

var matches = regExp.exec(text);
console.log(matches);
// 0: "(very)"
// 1: "very"

02)

此解决方案获得所有匹配,包括括号,来源:https://stackoverflow.com/a/30674943

var text = "here is a (very) long link to this article on [Math.random()](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Math/random)";

var regExp = /(?:\()[^\(\)]*?(?:\))/g;

var matches = text.match(regExp);
console.log(matches);
// 0: "(very)"
// 1: "()"
// 2: "(https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Math/random)"

但在嵌套括号场景中,它并不像预期的那样工作,即:

var text = "text (and [a markdown link within parenthesis](https://google.com))";

var regExp = /(?:\()[^\(\)]*?(?:\))/g;

var matches = text.match(regExp);
console.log(matches);
// ["(https://google.com)"]

03)

这里有一个似乎相关的phpregex解决方案:

https://stackoverflow.com/a/12994041

但是我不知道如何在javascript中实现正则表达式,即:

preg_match_all('/^\\((.*)\\)[ \\t]+\\((.*)\\)$/', $s, $matches);

共有2个答案

赵开诚
2023-03-14

试试(?)?

说明:

(?

[^()]-匹配除)以外的一个或多个字符。

<代码>(?=\))-用积极的前瞻性断言以下内容是

演示

楚意
2023-03-14

我将使用一个正则表达式,它还要求方括号中的部分位于括号内的链接之前。

/\[([^\]]+)\]\([^)]+\)/g

确保使用g标志。这还包括一个捕获组,以便您可以区分“可见”部分(方括号之间)和其他“不可见”部分:

var text = "here is a (very) long link to this article on [Math.random()](https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Math/random)";

var regExp = /\[([^\]]+)\]\([^)]+\)/g;

var match;
while (match = regExp.exec(text)) {
     console.log("full match: " + match[0]);
     console.log("keep: " + match[1]);
}
 类似资料:
  • 问题内容: 如何获取字符串中的括号值。 我只需要AED文字。谢谢 问题答案: 编译并打印“ AED”。甚至适用于多个括号: 正则表达式表示: :字符 :开始比赛组 :以下字符之一 :不是以下字符 :与前面的一样,这表示“除” 以外的所有字符 :集合中的其他内容之一 :停止比赛组 :字面量闭式括号

  • 我想在像这样的文本中插入()并将它们放入数组中,但里面可能有一些嵌套的括号。 文本: 应该这样处理: 我怎么能这么做?

  • 我有下一个带嵌套括号的字符串: 我想用打印出来的每个括号的值填充一个数组:

  • 当我使用之类的东西时,它仍然会触发,就像连字符无效一样。我尝试了和

  • 我想匹配括号内的字符串,如: 字符串也可以包含闭括号。如何在不编写解析器的情况下将其与Java中的正则表达式匹配,因为这是我项目的一小部分。谢谢 编辑: 我想搜索一个字符串块,找到类似于,或只是

  • 问题内容: 我有一个样本字符串 我只想要该值而不是(在另一个内部) 如何在Python中以最简单的方式做到这一点?也许通过使用RegEx(我不擅长)? 问题答案: 怎么样: 对我来说,这打印: 请注意,调用会找到与正则表达式的第一个匹配项,因此除非您再次重复搜索,否则它将不会找到。 编辑: 这里的正则表达式是python原始字符串文字,基本上意味着反斜杠不会被视为特殊字符,而是会原样传递给方法。正