0

私はこの文字列を持っています:'foo = bar; this = is; not = necessary'

私はこの結果を得たいと思います:{"name" : "foo", "value" : "bar"}

; の後にあるものは必要ありません。

正規表現を使用する必要があることはわかっていますが、正規表現の仕組みがよくわかりません。

よろしくお願いします。

4

2 に答える 2

3

あなたが使用することができます:

var values='foo = bar; this = is; not = necessary'.split('; ')[0].split(' = ');
var obj={"name" : values[0], "value" : values[1]}

このようにあなたはします:

  1. 'foo = bar; this = is; not = necessary'.split('; ')、を返します['foo = bar','this = is','not = necessary']
  2. 最初の要素だけが必要なので'foo = bar; this = is; not = necessary'.split(';')[0]'foo = bar'
  3. 次に、もう一度分割します'foo = bar; this = is; not = necessary'.split(';')[0].split(' = ')['foo','bar']
  4. そして最後にオブジェクトを作成します
于 2012-08-12T15:11:31.243 に答える
1

正規表現を使用して特定の文字列を検索し、文字foo = bar列の一部に一致する指定された名前を検索する方法:

function getNameValuePair(string, needle) {
    if (!string || !needle) {
        return false;
    }
    else {
        var newNeedle = needle + '\\s+\\=\\s+\\w+',
            expr = new RegExp(newNeedle),
            parsed = string.match(expr).join(),
            parts = parsed.split(/\s+\=\s+/),
            returnObj = {'name' : parts[0], 'value' : parts[1]};

        return returnObj;
    }
}

var string = 'foo = bar; this = is; not = necessary',
    nameValueObj = getNameValuePair(string, 'foo');

console.log(nameValueObj);

JS フィドルのデモ

もちろん、これは要件に合わせて調整することもできます。

ただし、次のとおりです。

  1. この関数は、両方のパラメーターが存在することを確認し、存在しない場合は単純に を返しますfalse
  2. needle(この場合は 'foo')、1 つまたは複数の空白単位、1=文字、1 つまたは複数の空白文字で構成される正規表現パターンを作成します。空白が常に存在するとは限らない場合は、変更する方がよい場合がありますnewNeedle = needle + '\\s*\\=\\s*\\w+'(+一致は「1 つ以上」、*一致は「0 以上」)。
  3. そのパターンから正規表現を作成し、
  4. 指定された文字列がパターンに一致するかどうかをテストし、一致する場合はその一致をparsed変数に格納します。
  5. 変数を別の正規表現で分割parsedし、0 個以上の空白の後に 0 個以上の空白が続くパターンで効果的に分割し、分割された=部分をparts配列変数に格納します。
  6. 変数からオブジェクトを構築しpartsます。
  7. その変数を返します。

2 行で 1 つの RegExp を作成するのはばかげていたので、上記を少し更新しました。

function getNameValuePair(string, needle) {
    if (!string || !needle) {
        return false;
    }
    else {
        var expr = new RegExp(needle + '\\s+\\=\\s+\\w+'),
            parsed = string.match(expr).join(),
            parts = parsed.split(/\s+\=\s+/),
            returnObj = {'name' : parts[0], 'value' : parts[1]};

        return returnObj;
    }
}

var string = 'foo = bar; this = is; not = necessary',
    nameValueObj = getNameValuePair(string, 'foo');

console.log(nameValueObj);

JS フィドルのデモ

参考文献:

于 2012-08-12T15:41:47.147 に答える