正则表达式:提取“键:值”(无分隔符)

时间:2012-11-27 14:27:06

标签: javascript regex string

您能否仅使用一个正则表达式提取这些" key:value" 对?

"a: xyz   b:  pqr st  c: lm no p"

我想要的结果:

"a" => "xyz"
"b" => "pqr st"
"c" => "lm no p"

我的尝试(使用两个正则表达式)

var s = 'a: xyz   b:  pqr st  c: lm no p';
var r = /(?:.(?!(?:a|b|c):))+/g;
var m;

while ((m = r.exec(s))) {

    var s2 = m[0];
    var r2 = /(a|b|c):\s*(.+)/;
    var m2 = r2.exec(s2);

    console.log('"' + m2[1] + '" => "' + m2[2] + '"');
}

我得到的结果:

"a" => "xyz  "
"b" => "pqr st "
"c" => "lm no p"

那么,这只能用一个正则表达式完成吗?

3 个答案:

答案 0 :(得分:3)

<击>

<击>

使用正则表达式/(\w+):\s*([^:]+)(?=\s|$)/g

请参阅 this demo

<击>

要修剪空白字符,请使用正则表达式使用正则表达式

<击>

<击>
/(\w+):\s*([^:]*\S)\s*(?=\w+:|$)/g

请参阅 this demo

<击>

 /\b(\w+):\s*([^:]*\S)\b\s*(?=\w+:|$)/g

请参阅 this demo

答案 1 :(得分:2)

你可以试试这个

var s = 'a: xyz   b:  pqr st  c: lm no p';
var r = /(?:\s|^)(\w+):\s*(.*?)(?=\s+\w+:|$)/g;
var m;

while ((m = r.exec(s))) {
    console.log('"' + m[1] + '" => "' + m[2] + '"');
}

答案 2 :(得分:0)

正则表达式:

/(?:.(?!(?:a|b|c):))+\w/g