簡體   English   中英

正則表達式以匹配JavaScript中某些字符未包含的字符串?

[英]Regex to match string that's not contained in certain characters in JavaScript?

我試圖用JavaScript中的regex替換字符串的某些部分,但前提是這些部分未包裝在{{{}}}

我當前使用的系統可以進行多個字符串替換,並將替換內容包裝在這些括號中。 因此,如果我將“ 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}}}"

更新資料

剛剛意識到這是行不通的,但是暫時將其留在這里,直到我能弄清楚為止。 盡管如此,這還是很有趣的:)

模仿正則表達式中的后向和前向斷言:

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}}}

這基本上執行了沒有重疊的替換,因此您不必擔心以前的括號表達式。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM