Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/regex/20.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
仅替换匹配外部的Javascript正则表达式_Javascript_Regex - Fatal编程技术网

仅替换匹配外部的Javascript正则表达式

仅替换匹配外部的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", ":)"

我希望能够替换,但仅限于字符串的某一部分,我基本上希望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",
    ":)": "\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