正则表达式 - 匹配尽可能少的事件

时间:2016-04-14 02:44:07

标签: javascript regex

正则表达式:

/(?!\s)([^]+?)\s*((?!.+\)\s*\()\([^-].+ \d{2}\/\d{2}\/\d{4} .+\))/g


输入

  

一些笔记(某些用户(SU950)16/09/2015 16:56:38)其他一些笔记(另一个>用户(AU951)16/09/2015 16:56:38)

     

示例说明   类型:OUTBOUND CALL BACK(用户名(UN973)18/09/2015 11:49:10)

     

多行注意事项

     

第二行笔记(USER NAME(UN973)18/09/2015 11:52:24)

     

新笔记。 (用户名(UN973)18/09/2015 11:55:15)


预期输出:

  • 一些笔记(有些用户(SU950)16/09/2015 16:56:38)
    • 一些注释
    • (某些用户(SU950)16/09/2015 16:56:38)
  • 其他一些说明(另一个>用户(AU951)16/09/2015 16:56:38)
    • 其他一些笔记
    • (另一个>用户(AU951)16/09/2015 16:56:38)
  • 示例备注类型:OUTBOUND CALL BACK(用户名(UN973)18/09/2015 11:49:10)
    • 示例备注类型:OUTBOUND CALL BACK
    • (用户名(UN973)18/09/2015 11:49:10)
  • 关于多行第二行笔记的一些注释(USER NAME(UN973)18/09/2015 11:52:24)
    • 关于多行第二行笔记的一些注释
    • (用户名(UN973)18/09/2015 11:52:24)
  • 新笔记。 (用户名(UN973)18/09/2015 11:55:15)
    • 新笔记。
    • (用户名(UN973)18/09/2015 11:55:15)


实际输出:

  • 一些笔记(某些用户(SU950)16/09/2015 16:56:38)其他一些笔记(另一个>用户(AU951)16/09/2015 16:56:38)
    • 一些注释
    • (某些用户(SU950)16/09/2015 16:56:38)其他一些说明(另一个用户(AU951)16/09/2015 16:56:38)
  • 示例备注类型:OUTBOUND CALL BACK(用户名(UN973)18/09/2015 11:49:10)
    • 示例备注类型:OUTBOUND CALL BACK
    • (用户名(UN973)18/09/2015 11:49:10)
  • 关于多行第二行笔记的一些注释(USER NAME(UN973)18/09/2015 11:52:24)
    • 关于多行第二行笔记的一些注释
    • (用户名(UN973)18/09/2015 11:52:24)
  • 新笔记。 (用户名(UN973)18/09/2015 11:55:15)
    • 新笔记。
    • (用户名(UN973)18/09/2015 11:55:15)


Regexr: http://regexr.com/3d79o

我认为问题在于,当涉及到表达式的最后部分时,我不会尽可能少地匹配,但是,我没有成功使用+?操作

1 个答案:

答案 0 :(得分:1)

一种简单的方法是使用以下regex,(如果格式是固定的)

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

<强> Regex Demo

Javascript代码

var re = /([^(]*)(\(.*?\(?.*?\).*?\))/g; 
var str = 'Some notes(SOME USER (SU950) 16/09/2015 16:56:38)Some other notes(ANOTHER > USER (AU951) 16/09/2015 16:56:38)\n\nExample Notes Type:OUTBOUND CALL BACK (USER NAME (UN973) 18/09/2015 11:49:10)\n\nsome notes on multiple lines\n\nsecond line of notes (USER NAME (UN973) 18/09/2015 11:52:24)\n\nA new note. (USER NAME (UN973) 18/09/2015 11:55:15)';
var m;

while ((m = re.exec(str)) !== null) {
  if (m.index === re.lastIndex) {
      re.lastIndex++;
  }
  print(m[0]);
  print(m[1]);
  print(m[2]);
}

<强> Ideone Demo