3

你能只用一个正则表达式提取这些“键:值”对吗?

"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"

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

4

3 回答 3

2

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

请参阅此演示

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

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

请参阅此演示

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

请参阅此演示

于 2012-11-27T14:31:57.793 回答
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] + '"');
}
于 2012-11-27T14:34:39.977 回答
0

正则表达式:

/(?:.(?!(?:a|b|c):))+\w/g
于 2012-11-27T14:34:45.880 回答