3

これらの「キー: 値」のペアを 1 つの正規表現のみで抽出できますか?

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

私が望む結果:

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

私の試み(2つの正規表現を使用)

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"

それで、これは1つの正規表現だけで行うことができますか?

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 に答える