RegExp关键字转义

问题描述

| 我有一个更改所选元素的HTML的函数
$(\'p\').fill(\'John\'); // \"John\"
..以当前HTML替换ѭ1。
$(\'p\').fill(\'Hi $value.\') // \"Hi John.\"
..太频繁。
// Should be \"The keyword is $value.\"
$(\'p\').fill(\'The keyword is \\$value.\'); // \"The keyword is \\Hi John..\"
我目前使用它来解析值。
value.replace(/\\$value/gi,item.innerHTML);
..我想到的解决方案是..
value.replace(/[^\\\\]\\$value/gi,\'$1\' + item.innerHTML);
..但在某些情况下,它不起作用。
// Ends up with \"$value John.\"
$(\'p\').fill(\'Hi\') // Yes,it supports stacking.
    .fill(\'$value John.\'); // Should be \"Hi John.\"
我也尝试过
value.replace(/[^\\\\]?\\$value/gi,\'$1\' + item.innerHTML);
..但这有多个问题。 如果非反斜杠字符不匹配,则
$1
不会被替换,而我会卡在随机插入的地方。 如果它是可选的,那儿仍然可以有一个反斜杠,然后我们陷入一个随机的反斜杠和AND8ѭ的困境。 有关如何解决此问题的任何想法?     

解决方法

反斜杠是字符串中的转义字符,因此使用一个不会使它出现在字符串中。尝试使用其中两个。您将得到一个字面的
\\
。 通过使用
Function
作为替换参数,您可以在JavaScript正则表达式中获得负面的回望感。
var result = str.replace(/(.)(\\$value)/,function(all,precedingChar,matched) {

   if (precedingChar == \'\\\\\') {
        return matched;
    }

    return precedingChar + \'hi John\';
});
jsFiddle。 此函数将完全按照您的要求执行,但是如果在比赛之前加
\\\\
,它将返回不变的字符串。