3

現在、文字列内のいくつかのプレースホルダーを置き換える単純な書式設定関数を作成しています。

var format = function (a, c) {
    return a.replace(/{ *([^} ]+) *}/g, function (b, a) {
        b = c;
        a.replace(/[^.|\[\]]+/g, function (a) {
            b = b[a];
        });
        return b;
    });
};

構文は現在中括弧表記 を使用していますが、代わりに 1 パーセントで動作するように -pattern を{key}変更しようとしています。RegExp%key

var pattern = /{ *([^} ]+) *}/g;

{}かっこをパーセントに置き換えようとしました%が、それでも正しく機能しません。

var pattern = /% *([^% ]+) */g;

元のパターンは次の条件で期待どおりに機能します。

var data = {
    obj: {
        foo: 'Foo',
        bar: 'Bar'
    },
    arr: ['Foo', 'Bar']
};

var objTest = '{obj.foo}, is not equal to {obj.bar}.'
format(objTest, data) // => 'Foo, is not equal to Bar.'

var arrTest = '{arr[0]}, is not equal to {arr[1]}.'
format(arrTest, data) // => 'Foo, is not equal to Bar.'

変更したパターンを使用すると、各プレースホルダー置換後の最後の文字が削除されるようです。

'%obj.foo, is not equal to %obj.bar.' // => 'undefined is not equal to Bar'
'%arr[0], is not equal to %arr[1]' // => 'undefined is not equal to Bar'

中括弧の代わりにpatternパーセンテージで使用できるように変更する方法はありますか?%{}

4

2 に答える 2

0

次のパターンを使用できます。

var regex = /%([^\b]+)/g;

これは、%記号の後に完全な単語が続くことを意味します。これには、空白文字、アンダースコアなどは含まれません。

代わりにこれらの文字も使用できるようにしたい場合は、次のように記述できます。

var regex = /%(\S+)/g;

これは次と同等です:

var regex = /%([^\s]+)/g;
于 2013-08-12T15:14:50.953 に答える