正则表达式匹配多行字符串

时间:2014-11-14 12:19:35

标签: javascript regex

抱歉,这个名字很糟糕的主题。 我正在寻找一个有效的正则表达式来匹配以下内容:

[2014-11-13 13:05:04] [path/to/class.instagram.php] Options: array (
  'client_id' => '',
  'client_secret' => '',
  'object' => 'tag',
  'object_id' => 'rwar',
  'aspect' => 'media',
  'callback_url' => 'http://www.localthisday.nl/instagram.callback.php',
)

我希望它分开,所以它看起来像这样:

1. [2014-11-13 13:05:04]
2.[path/to/class.instagram.php]
3. Options: array (
  'client_id' => '',
  'client_secret' => '',
  'object' => 'tag',
  'object_id' => 'rwar',
  'aspect' => 'media',
  'callback_url' => 'http://www.localthisday.nl/instagram.callback.php',
)

我现在正在使用这个:

(\[(.*)\])(\s{1})(\[(.*)\])(\s{1})(.*)/gmi

我知道,这不是一个非常好的,这可能就是为什么它没有像我希望的那样工作。 问题是;它是一个多行字符串,由于某种原因它不能用于多行。 有人可以帮帮我吗? 不幸的是,我在正则表达式中表现不佳。

3 个答案:

答案 0 :(得分:1)

只需在正则表达式中将(.*)替换为([\S\s]*)

/(\[.*\])\s(\[.*\])\s([\S\s]*)/gmi

DEMO

请参阅上面演示链接右侧的捕获。

答案 1 :(得分:0)

使用非贪心量词:

(\[.*?\])\s(\[.*?\])\s(.*)/gmi

答案 2 :(得分:0)

(\]|\))

试试这个。$1\n。见。演示。

http://regex101.com/r/pQ9bV3/32

var re = /(\]|\))/gm;
var str = '[2014-11-13 13:05:04] [path/to/class.instagram.php] Options: array (\n \'client_id\' => \'\',\n \'client_secret\' => \'\',\n \'object\' => \'tag\',\n \'object_id\' => \'rwar\',\n \'aspect\' => \'media\',\n \'callback_url\' => \'http://www.localthisday.nl/instagram.callback.php\',\n)';
var subst = '$1\n';

var result = str.replace(re, subst);