[英]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.