仅替换匹配外部的Javascript正则表达式
我希望能够替换,但仅限于字符串的某一部分,我基本上希望double内的任何东西都保持不变,只替换这些条件的外侧仅替换匹配外部的Javascript正则表达式,javascript,regex,Javascript,Regex,我希望能够替换,但仅限于字符串的某一部分,我基本上希望double内的任何东西都保持不变,只替换这些条件的外侧 var message = "this is my :) `funky :)` string with a funky `goal :D` live is good :D"; var map = { "<3": "\u2764\uFE0F", "</3": "\uD83D\uDC94", ":D": "\uD83D\uDE00", ":)"
var message = "this is my :) `funky :)` string with a funky `goal :D` live is good :D";
var map = {
"<3": "\u2764\uFE0F",
"</3": "\uD83D\uDC94",
":D": "\uD83D\uDE00",
":)": "\uD83D\uDE03",
":-)": "\uD83D\uDE03",
";)": "\uD83D\uDE09",
":(": "\uD83D\uDE12",
":p": "\uD83D\uDE1B",
";p": "\uD83D\uDE1C",
":'(": "\uD83D\uDE22",
":S": "\ud83d\ude1f",
":$": "\ud83d\ude33",
":@": "\ud83d\ude21"
};
for (var i in map) {
var regex = new RegExp(i.replace(/([()[{*+.$^\\|?])/g, '\\$1'), 'gim');
message = message.replace(regex, map[i]);
}
您可以构造一个正则表达式,在
映射
的所有.keys
之间交替,首先转义键,以便正则表达式中具有特殊含义的字符(如$
)被解析为文字字符,而不是特殊的正则表达式字符
也可以使用一种模式进行替换,该模式匹配一个反勾号,后跟非反勾号字符,再后跟另一个反勾号-这样所有反勾号封闭的子字符串也将匹配
调用。用构造的模式替换输入字符串上的
,并使用替换函数。如果匹配以反勾号开始,那么该匹配是您根本不想修改的,所以只需返回匹配即可。否则,匹配项是map
的键之一,因此在map
中返回该键处的关联值:
const message=“这是我的:)`funky:)`string加上funky`goal:D`live is good:D”;
常数映射={
“当我意识到我的badive使用了`([\s\s]*?)时,我进行了编辑”`
尝试匹配,但这只在内部匹配,我想要的几乎是相反的i
来自何处?很抱歉,我意识到我从现在添加的提取代码中漏掉了这一点,该代码似乎替换了所有元素。结果是这是我的再次检查-检查匹配是否以
反勾开始应该注意backtick封闭子字符串的
this is my \uD83D\uDE0f `funky :)` string with a funky `goal :D` live is good \uD83D\uDE00