1

文字列の特定の部分を JavaScript の正規表現に置き換えようとしていますが、それらが and でラップされていない場合に限り{{{ます}}}

私が現在使用しているシステムは、複数の文字列の置換を行い、置換をこれらの括弧で囲みます。したがって、「h」を曜日 (たとえば木曜日) に置き換えると、置換は を出力します"{{{Thursday}}}"。置換が再び発生した場合、文字列は最終的"{{{T{{{Thursday}}}ursday}}}"に木曜日の「h」が置換されたものになります。

私が探しているのは、「h」を置き換える正規表現パターンですが{{{}}}ラッパー内に含まれていない場合のみです。

前もって感謝します :)

編集:

ここにいくつかのコード例があります。各置換は括弧で囲まれ、正規表現パターンは過去の置換を回避するために (?!{{{) および (?!}}}) を使用します。

var string = 'n d m y',
    dayTextRegex = /(?!{{{)n(?!}}})/g,
    dayRegex = /(?!{{{)d(?!}}})/g,
    monthRegex = /(?!{{{)m(?!}}})/g,
    yearRegex = /(?!{{{)y(?!}}})/g;

string = string.replace(dayTextRegex, '{{{Monday}}}');
string = string.replace(dayRegex, '{{{04}}}');
string = string.replace(monthRegex, '{{{June}}}');
string = string.replace(yearRegex, '{{{2012}}}');

//string is now equal to "{{{Mon{{{04}}}ay}}} {{{04}}} {{{June}}} {{{2012}}}"
4

1 に答える 1

0

アップデート

これはうまくいかないことに気づきましたが、私がそれを理解できるようになるまで、ここに置いておきます。それにもかかわらず、それは興味深いです:)

正規表現で後読みおよび先読みアサーションを模倣する:

var str = '{{{h}}}';
str.replace(/({{{)?h(}}})?/g, function($0, $1, $2) { 
    return $1 && $2 ? $0 : '{{{' +$0 + '}}}';
});

戻り値:

{{{h}}}

参照: http://blog.stevenlevithan.com/archives/mimic-lookbehind-javascript

更新 2

式をどのように使用しているかを見て、代わりにこの構成を使用します。

string.replace(/[ndmy]/g, function($0) {
    switch ($0) {
        case 'n':
            return '{{{Monday}}}';

        case 'd':
            return '{{{04}}}';

        case 'm':
            return '{{{June}}}';

        case 'y':
            return '{{{2012}}}';
    }
})

出力:

{{{Monday}}} {{{04}}} {{{June}}} {{{2012}}}

これは基本的にオーバーラップなしで置換を実行するため、以前の中括弧式について心配する必要はありません。

于 2012-06-07T10:54:34.123 に答える