2011-05-25 163 views
1

我有改變所選元素的HTML的函數..正則表達式關鍵字轉義

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

..that替換$value與當前HTML ..

$('p').fill('Hi $value.') // "Hi John." 

..too常。

// 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

如何解決這個問題的任何想法?

回答

0

反斜槓是字符串中的轉義字符,所以使用一個字符串將不會使其出現在字符串中。嘗試使用其中兩個。你將被留下一個文字\

通過使用Function作爲替換參數,您可以在JavaScript正則表達式中獲得負向後視。

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

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

    return precedingChar + 'hi John'; 
}); 

jsFiddle

此功能將完全按照您的要求進行,但如果您在匹配前加上\\,它將返回字符串不變。

+0

我的問題是如何跳過'$ value',如果它之前有一個反斜槓。 – Kayla 2011-05-25 03:05:50

+0

@tyler如果有前面的反斜槓,你是否希望它被返回? – alex 2011-05-25 03:07:12

+0

不需要。我希望'$ value'變成HTML,'\ $ value'變成'$ value'。 – Kayla 2011-05-25 03:29:36