正则表达式使用Javascript

时间:2015-07-02 15:51:14

标签: javascript regex

我觉得正则表达式很痛苦。如果我没有找到一个能够完全符合我要求的例子,那么我就迷失了。我希望有人能帮助我。

我有一个这样的字符串:

  

要显示的一些文字(信息)(更多信息)

我想使用正则表达式来获取第二组括号和文本。或者显示的最后一组。就像这个例子我想抓住:

  

(更多信息)

到目前为止,我发现了这个:

\((?:[^()])*\)

但这给了我第一套,我无法弄清楚如何获得第二套。

更新 只有当有超过1组括号时才可以选择最后一组括号吗?

  

一些文字(信息)(更多信息)

应该返回:

  

(更多信息)

但如果是这样的话:

  

一些文字(信息)

它不会拿起任何东西

2 个答案:

答案 0 :(得分:0)

这将获得字符串中的最后一组括号 单行的\([^()]*\)(?!.*?\([^()]*\))
\([^()]*\)(?![\S\s]*?\([^()]*\))用于多行

扩展:

 \(              # Last '(..)'
 [^()]* 
 \)
 (?!             # Not '(..)' downstream
      .*? 
      \(
      [^()]* 
      \)
 )

UPDATE Can I get the last set of brackets to be selected only when there is more than 1 set of brackets?

是。捕获组1的结果 \([^()]*\).*?(\([^()]*\))(?!.*?\([^()]*\))

扩展:

 \(                            # Previous '(..)'
 [^()]* 
 \)
 .*? 
 (                             # (1 start), Last '(..)'
      \(                          
      [^()]* 
      \)
 )                             # (1 end)
 (?!                           # Not '(..)' downstream

      .*? 
      \(
      [^()]* 
      \)
 )

答案 1 :(得分:0)

除非有一些令人信服的理由使用正则表达式,否则您还可以拆分,如下所示:

function last_paren_item(str) {
    var pieces = str.split(/(\(.*?\))/);
                             ^-----^        PARENTHESIZED TEXT
                            ^-------^       KEEP SPLITTERS IN RESULT
    return pieces[pieces.length-2];
}

这利用了split的功能,如果包含在正则表达式中的括号(捕获组)中,则分割符包含在结果中。最后一个带括号的部分将始终是该组的最后一个元素。

> var str = "some text to be displayed (info) (more info)";
> var pieces = str.split(/(\(.*?\))/)
< ["some text to be displayed ", "(info)", " ", "(more info)", ""]
> pieces[pieces.length-2]
< "(more info)"

您可能更喜欢这个比正则表达式\([^()]*\)(?!.*?\([^()]*\))更具可读性。