匹配多行正则表达式Javascript

时间:2013-06-04 13:03:16

标签: javascript regex multiline

我已经把我的头靠在墙上过夜的大部分时间,所以我正在寻找堆叠流神来帮助解决这个问题。我有一个文本字符串,我试图解析成一个数组。请参阅以下示例:

Name: John Doe
Address: 123 W Main Street
City: Denver


Name: Julie Smith
Address: 1313 Mockingbird Lane
City: Burbank

我想得到的是一个如下所示的数组:

[Name: John Doe Address: 123 W Main Street City: Denver, Name: Julie Smith Address 1313 Mockingbird Lane City: Burbank]

我从以下正则表达式开始,它在regexpal中工作正常:

(Name.+)(\n.*){2}

然而,当我尝试在我的程序中使用它甚至jsfiddle时,我得到一个null返回:

http://jsfiddle.net/auqHA/1/

有什么想法吗?

2 个答案:

答案 0 :(得分:0)

您可能希望将 JavaScript的 String.prototype.match用于 /(?:Name.+)(?:\n.*){2}/g。非捕获组是你不会加倍你的结果。

var s = '\
Name: John Doe\n\
Address: 123 W Main Street\n\
City: Denver\n\
\n\
\n\
Name: Julie Smith\n\
Address: 1313 Mockingbird Lane\n\
City: Burbank\
';

var arr = s.match(/(?:Name.+)(?:\n.*){2}/g);
/* gives
["Name: John Doe\n\
Address: 123 W Main Street\n\
City: Denver", "Name: Julie Smith\n\
Address: 1313 Mockingbird Lane\n\
City: Burbank"]
*/
// so if you want no new lines,
arr.map(function (e) {return e.replace(/\n/g, ' ');});

编辑只是看着你的小提琴,它不起作用的原因是因为你忘记了换行。即。

s = 'a\
b'; // s === "ab"

s = 'a\n\
b'; // s === "a\nb"

答案 1 :(得分:0)

我不是JS专家,但经过一些努力,我可以提供这个脚本:

var rawdata='\
\
\
Name: John Doe\
Address: 123 W Main Street\
City: Denver\
\
\
Name: Julie Smith\
Address: 1313 Mockingbird Lane\
City: Burbank';

var looppattern = /Name: /g;
var loopnum = rawdata.match(looppattern);

var pattern = /\s{2}([\w\:\s]+)/;
var nummessages = rawdata.replace(new RegExp("Name:", 'g'),"{Name:").split("{");

alert(nummessages[1]);
alert(nummessages[2]);

似乎在JSFiddle中有效。在这里我认为'{'不在于你可以改变这个分隔符的字符串之间。