0

ユーザーが構成を編集するテキストエリアがあります。次のようにフォーマットされています。

foo = 'value'
bar = 2.1
john = false

値は、false、true、float、または文字列 (関数なし) にすることができます。次のようなものを作成するには、この文字列を正規表現する必要があります。

{
    foo: 'value',
    bar: 2.1,
    john: false
}

このためのライブラリなどはありますか?

4

2 に答える 2

0

私はあなたのリクエストの良い出発点となるこの回答を取り、さまざまなデータ型を処理するためのルールをいくつか追加しました。おそらくこれが役立ちます:

var data ="foo = 'value'";
    data +="\n" + "bar = 2.1";
    data += "\n" + "john = false";


function JSONFY(data){
    var regex = {
        section: /^\s*\[\s*([^\]]*)\s*\]\s*$/,
        param: /^\s*([\w\.\-\_]+)\s*=\s*(.*?)\s*$/,
        comment: /^\s*;.*$/
    };
    var value = {};
    var lines = data.split(/\r\n|\r|\n/);
    var section = null;


    function handleSection(sec) {
        var isFloat = /^(?:[1-9]\d*|0)?(?:\.\d+)?$/;
        if(sec.match(isFloat)) {
            return parseFloat(sec);
        } else if(sec=='true') {
            return true;
        } else if(sec=='false') {
            return false;
        }
        return sec.replace(/^['"]/,'').replace(/['"]$/,'');
    }

    lines.forEach(function(line){
        if(regex.comment.test(line)){
            return;
        }else if(regex.param.test(line)){
            var match = line.match(regex.param);
            if(section){
                value[section][match[1]] = match[2];
            }else{
                value[match[1]] = handleSection(match[2]);
            }
        }else if(regex.section.test(line)){
            var match = line.match(regex.section);
            value[match[1]] = {};
            section = match[1];
        }else if(line.length == 0 && section){
            section = null;
        };
    });
    return value;
}

console.log(JSONFY(data));

これがテストするフィドルです。

于 2013-02-15T11:07:39.870 に答える
0

入力データをどれだけ信頼できるかに応じて、次のようなコードを使用して単純な関数をいつでも作成できます (簡単にするために jQuery を使用します)。

var lines = $('textarea').val().split('\n');
var output = '{';
$(lines).each(function(l){
    output += '\n\t' + lines[l].replace(/(\w+)\s=\s(.*)/, '$1: $2,');
});
output = output.substring(0, output.length - 1);
output += '\n}';
$('textarea').val(output);

ここでの主なポイントは、どれだけ厳密にしたいかによって、正規表現を微調整する必要があるということです (つまり、 の?後に空白をオプションとして使用できるよう\sにするか、値が特定の形式であることを確認します。

于 2013-02-15T11:14:29.260 に答える