正则表达式用于匹配 JavaScript 中某些字符中不包含的字符串
Regex to match string that's not contained in certain characters in JavaScript?
我试图用 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}}}
这基本上执行了没有重叠的替换,因此您不必担心以前支撑的表达式。
相关文章:
- 如何使用JQuery检查输入(电子邮件)字段是否包含特殊字符
- Javascript中的正则表达式,用于只有数字的字符串,并且不应在除数字以外的任何位置包含任何字符
- 链接问题:下一个字符包含在<a>TinyMce ui TinyMce中的标签
- 为什么我的捕获括号之外的字符包含在我的正则表达式的匹配项中
- 将字符串值传递到包含特殊字符的 JavaScript 函数中
- 正则表达式,以字母开头,在javascript中包含x个字符
- Javascript 密码不应包含用户的帐户名或用户全名中超过两个连续字符的部分
- 包含特殊字符 (!,@,#,&) 不包括其他特殊字符
- 电子邮件验证不接受仅包含两个字符的域
- 验证字符串是否仅包含 javascript 中的某些字符
- 正则表达式:密码必须至少包含一个特殊字符
- 如何检查字符串是否包含非英语字符列表
- Javascript变量包含特殊字符
- 如果字段在几行空行之后包含前几个字符,则验证描述字段长度
- URL中包含特殊字符的HTTP状态代码
- 如何测试只包含字母字符和短划线(-)[javascript]的字符串
- 为javascript函数提供可能包含特殊字符的字符串参数
- 解析包含带$Parse的点字符的字段名称
- 如何使用regex在多行中选择包含任意字符的值
- 如何在字符之间进行匹配,但不将它们包含在结果中