-1

在 jquery 中,我抓取了一个如下所示的文本字符串:

Org nr: 9 111222-3333
Firma: Company Name
Kommun: Botkyrka
Postadress: SomeRoad 84, 147 52 TUMBA,
Verksamhet: Bolaget ska bedriva taxiverksamhet.
Innehavare: 11111111-1111 Surname, Name Name, SomeRoad 84, 147 52 TUMBA,

它可以包含任意数量的行并具有任意键和任意值。它们总是用冒号分隔。

我想将这些保存为对象的键值,并且不确定哪种方法最好。我应该做一个正则表达式吗?在这种情况下,我如何在正则表达式中进行 foreach?

4

4 回答 4

3

嗯嗯..

var text = '...';
var obj = {};
var rows = text.split('\n');
for (var i=0; i<rows.length; i++) {
    var arr = rows.split(':');
    obj[arr[0]] = arr[1];
}

console.log(obj);

现在写完后,我发现我为时已晚......而且正则表达式似乎更好,但这可能更容易阅读......

于 2013-07-28T20:15:35.270 回答
1

你去:(jsbin)

var t="Org nr: 9 670220-5458\n\      // you said you have linebreaks
Firma: Shamel Taxi\n\
Kommun: Botkyrka\n\
Postadress: Grytstigen 84, 147 52 TUMBA,\n\
Verksamhet: Bolaget ska bedriva taxiverksamhet.\n\
Innehavare: 19670220-5458 Fathalla, Shamel Said, Grytstigen 84, 147 5\2 TUMBA,";

var g=t.split(/[\n\u0085\u2028\u2029]|\r\n?/gim);

var o={};

for (var i=0;i<g.length;i++)
{
  var g2= g[i].split(':');

  o[g2[0].trim()]=g2[1];
}
console.log(o)

结果

[object Object] {
  Firma: " Shamel Taxi",
  Innehavare: " 19670220-5458 Fathalla, Shamel Said, Grytstigen 84, 147 5 TUMBA,",
  Kommun: " Botkyrka",
  Org nr: " 9 670220-5458",
  Postadress: " Grytstigen 84, 147 52 TUMBA,",
  Verksamhet: " Bolaget ska bedriva taxiverksamhet."
}
于 2013-07-28T20:16:39.637 回答
0

使用正则表达式,您将使用以下内容:

([^:]+): (.*)

反向引用组 1 是键,反向引用组 2 是值。

JS:

result = subject.match(/([^:]+): (.*)/g);

然后,您只需要访问这些组,您就拥有了您需要的所有东西。

于 2013-07-28T20:12:53.770 回答
0

这是诀窍,你可以先用':'分割字符串,然后对于从第二个元素开始的每个组件,得到最后一部分用空格分隔并假设这是下一个键值对的名称,这是我的尝试:

var string = "Org nr: 9 670220-5458 Firma: Shamel Taxi Kommun: Botkyrka Postadress: Grytstigen 84, 147 52 TUMBA, Verksamhet: Bolaget ska bedriva taxiverksamhet. Innehavare: 19670220-5458 Fathalla, Shamel Said, Grytstigen 84, 147 52 TUMBA,;"

splited = string.split(':');
list = [splited[0]]
for (x in splited) {
    if (x == 0) continue;
    var t = splited[x].split(' ');
    list.push(t.slice(0, t.length - 1).join(' ').trim());
    list.push(t[t.length - 1].trim());
}

result = {}
for (var i = 0; i < list.length - 1;) {
    result[list[i]] = list[i + 1];
    i += 2;
}

console.log(result);

这是结果

Firma: "Shamel Taxi"
Innehavare: "19670220-5458 Fathalla, Shamel Said, Grytstigen 84, 147 52"
Kommun: "Botkyrka"
Org nr: "9 670220-5458"
Postadress: "Grytstigen 84, 147 52 TUMBA,"
Verksamhet: "Bolaget ska bedriva taxiverksamhet."

同样,您可以使用此代码,由于输入太随机,这是我能给您的最好的。

于 2013-07-28T20:17:24.887 回答