RegExp关键字转义

时间:2011-05-25 01:26:54

标签: javascript regex

我有一个改变所选元素的HTML的函数..

$('p').fill('John'); // "John"

..用当前HTML替换$value ..

$('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不会被替换,我会被卡在随机插入的位置。
  • 如果它是可选的,那里仍然会有反斜杠,然后我们会遇到随机反斜杠,$1

有关如何解决此问题的任何想法?

1 个答案:

答案 0 :(得分:0)

反斜杠是字符串中的转义字符,因此使用它不会使它出现在字符串中。尝试使用其中两个。您将留下文字\

通过使用Function作为替换参数,您可以在JavaScript正则表达式中获得负面的lookbehinds。

var result = str.replace(/(.)(\$value)/, function(all, precedingChar, matched) {

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

    return precedingChar + 'hi John';
});

jsFiddle

此功能将完全按照您的方式执行,但如果您在匹配前加上\\,则会返回不变的字符串。