正则表达式用于匹配 JavaScript 中某些字符中不包含的字符串

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

本文关键字:字符 包含 字符串 用于 JavaScript 正则表达式      更新时间:2023-09-26

我试图用 JavaScript 中的正则表达式替换字符串的某些部分,但前提是它们没有包装在 {{{}}} 中。

我目前拥有的系统执行多个字符串替换并将替换包装在这些括号中。因此,如果我将"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}}}

这基本上执行了没有重叠的替换,因此您不必担心以前支撑的表达式。