2

在晚上的大部分时间里,我已经把头撞在墙上了,所以我期待着 stackoverflow Gods 来帮助解决这个问题。我有一个试图解析为数组的文本字符串。请参见下面的示例:

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]

我从以下正则表达式开始,它在正则表达式中运行良好:

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

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

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

有什么想法吗?

4

2 回答 2

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 中工作。在这里,我认为 '{' 不在您可以更改此分隔符的字符串之间。

于 2013-06-04T19:04:48.497 回答
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, ' ');});

编辑刚刚看了你的小提琴,它不起作用的原因是你忘了换行。IE

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

s = 'a\n\
b'; // s === "a\nb"
于 2013-06-04T14:50:36.853 回答