2011-03-25 807 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 +'} $'

删除^和$。