代码之家  ›  专栏  ›  技术社区  ›  Braintapper

正则表达式解析多个元素,第一个元素是可选的

  •  0
  • Braintapper  · 技术社区  · 16 年前

    情景A: 如果对第123号案件进行了调查,说明如下: [123]重写javascript代码。

    期望输出:Case:123注:重写javascript代码。

    情景B: 重写javascript代码。

    所需输出:Case:Null注意:重写javascript代码。


    这是我正在使用的代码:

    (\[(.*)\])(.*)
    

    对于场景A,我得到: 可忽略字段:[123] 案例:123 注意:重写javascript代码。

    场景B,我得到: 可忽略字段:null 大小写:空 注:空

    现在是问题(最后!)-如果没有显示“[##]]”模式,有没有办法让音符部分显示出来?

    3 回复  |  直到 16 年前
        1
  •  1
  •   Lucero    16 年前

    您可能想尝试以下方法:

    (\[(.*)\])?\s*(.*)
    
        2
  •  1
  •   Tomalak    16 年前
    ^\s*(\[[^]]+\])?\s*(.*)
    

    .* 如果你不是绝对地,积极地想要匹配 . 你想要匹配的是“直到最后的一切” ]

    ^          # start-of-string
    \s*        # any number of leading white-space (gets ignored)
    (          # match group 1
      \[       # literal [
      [^]]+    # anything but ]
      \]       # literal ]
    )?         # end match group 1, make optional
    \s*        # any number of intermediary white-space (gets ignored, too)
    (.*)       # anything else on that line
    
        3
  •  0
  •   wallyk    16 年前

    严格来说,这不是正则表达式的问题。它由两部分组成:正则表达式匹配,然后应用一点逻辑: 如果[n+]部分匹配,则输出“\1注释”或“空注释”。