javascript - 正则表达式从具有多个方括号的字符串中查找匹配项

标签 javascript c# .net regex regex-group

我有一段如下:

用于测试 [!#today] 的一些措辞,其中 [!condition] 不满足此措辞 [!ShowElemIf://Student/FullName; [[[文本未完全识别]]] ;/First Name] 但发现简单标签有年龄 [!ShowElemIf://Student/Age;xml//Student/DOB/@formatted;y]

我需要从上面找到所有占位符/标签,例如:[!tag] 使用 C#。我尝试了一个正则表达式,但它无法找到上面以粗体突出显示的具有“全名”字样的标签。

List<string> tags = Regex.Matches(
                     sampleText.Replace(Environment.NewLine, ""), @"\[!([^]]+)\]	")
                     .Cast<Match>()
                     .Select(x => x.Groups[1].Value)
                     .ToList();

使用这个正则表达式我可以在下面找到但不是突出显示的那个。

  1. 今天
  2. 条件
  3. ShowElemIf://Student/Age;xml//Student/DOB/@formatted;y

最佳答案

您需要使用 .NET 正则表达式中可用的平衡组:

@"\[!((?:[^][]+|(?<o>\[)|(?<-o>)])*(?(o)(?!)))]"

参见 regex demo

详细信息:

  • \[! - 一个 [!子串
  • ((?:[^][]+|(?<o>\[)|(?<-o>)])*(?(o)(?!))) - 捕获组 1 匹配
    • (?: - 具有 3 个备选方案的非捕获组:
      • [^][]+| - 除 [ 以外的 1 个或多个字符和 ] , 或
      • (?<o>\[)| - 一个 [插入“o”组堆栈,或
      • (?<-o>)] - 一个 ]从“o”组堆栈中减去
    • )* - 零次或多次出现
    • (?(o)(?!))) - 检查“o”组堆栈是否为空的条件构造。如果为空,则继续匹配,否则,不返回匹配。
  • ] - 字面结尾 ]符号。

关于javascript - 正则表达式从具有多个方括号的字符串中查找匹配项,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43140631/

相关文章:

javascript - 保护 API token ,是否可以将其作为我的 index.js 中的 var?

javascript - 计算用户使用 OnClick() 放入 HTML 表中的数字的平均值

javascript - 如何使用 document.getElementsByClassName ("Class_Name"直接更改 JS 中的样式属性)

c# - 在 C#.NET 中使用部分 URL 的 Http Post

.net - Json.NET 与 .NET 4.6 的兼容性

Javascript 没有将我的计数器变量视为数字

c# - WMEncoder 在一次迭代后抛出 OutOfMemoryException

c# - 输出缓存/响应缓存 VaryByParam

c# - 使用 Entity Framework 6 的初始负载和性能问题

c# - 如何使用 C# 仅获取目录中的文件名?