2011-03-25 287 views
8

尋找正則表達式模式中大括號的匹配幫助。 我已經嘗試過不同的轉義組合,並且符號匹配與小運氣。也許是因爲這是星期五下午,我忽略了一些東西;但您的想法將不勝感激。下面的代碼:正則表達式匹配大括號

function stringFormat(str, arr) { 
    for (var i = 0; i < arr.length; i++) { 
     var regExp = new RegExp('^\{' + i + '\}$', 'g'); 
     str = str.replace(regExp, arr[i]); 
    } 
    return str; 
} 

var str = '<p>The quick {0}, brown {1}</p>'; 

$('#test').html(stringFormat(str, ['brown', 'fox'])); 

我也對這個開始了小提琴,http://jsfiddle.net/rgy3y/1/

+0

這似乎是正確的...... – 2011-03-25 20:21:35

回答

14

,而不是試圖匹配一串不同的數字,爲什麼不只是做這一切一舉:

function stringFormat(str, arr) { 
    return str.replace(
     /\{([0-9]+)\}/g, 
     function (_, index) { return arr[index]; }); 
} 

在你的榜樣,

var str = '<p>The quick {0}, brown {1}</p>'; 

// Alerts <p>The quick brown, brown fox</p> 
alert(stringFormat(str, ['brown', 'fox'])); 

這樣做的好處是什麼如果arr包含像'{1}'這樣的字符串,會發生奇怪的情況。例如。
stringFormat('{0}', ['{1}', 'foo']) === '{1}'一致,而不是'foo'與原有的固定版本,但有不一致stringFormat('{1}', ['foo', '{0}']) === '{0}'

+0

謝謝邁克。欣賞建議並解決潛在的問題。 – gnome 2011-03-28 21:26:06

+0

我把你的格式函數,但我把它作爲一個靜態方法添加到'字符串'和使用'參數'數組,而不是讓用戶傳入一個數組。 http://codetunnel.com/blog/post/string-replacement-is-natively-supported-by-consolelog – Chev 2013-07-09 19:31:40

+0

你的鏈接似乎是關閉@Chev。只是一個友好的提醒:'參數'不是一個數組。 – 2016-06-29 18:23:36

6

要在一個字符串,你需要鍵入\\得到\。特別是,'\{' == '{'。你想要'\\{'

+0

你是對的(廢話!)。我知道這是星期五下午:-) – gnome 2011-03-25 20:24:09

0

不熟悉JavaScript(或其他)正則表達式,但只匹配僅包含{X}(或僅包含該表達式的行,也取決於您的正則表達式)的表達式。
'^ {'+ i +'} $'

刪除^和$。