【问题标题】:Replace everything between two strings with numbers i++ {0},{1}用数字 i++ {0},{1} 替换两个字符串之间的所有内容
【发布时间】:2014-05-13 18:01:16
【问题描述】:

具有替换字符串的机制,如 .NET string.Format 中的 javascript ("{0} - {1}",'a','b') 将导致 "a - b"

我正在寻找将两个字符串之间的所有内容替换为 {0}{1}...

的机制

例子:

var str = "([OrderDate] >= Func:{TheApplication().GetProfileAttr('TestDate')} ) and [OrderDate] < 1/1/2013 AND [Name] = Func:{TheApplication().GetProfileAttr('Name')}"
stringFormatProducer(str,"Func:{","}");

会给出结果

"([OrderDate] >= {0} ) and [OrderDate] < 1/1/2013 AND [Name] = {1}"

我以可怕的方式完成了这个机制,我将它拆分到 Func:{ 然后 } 然后迭代它,我相信有人已经有了更好的解决方案。

【问题讨论】:

  • @RoryMcCrossan wtf?它与文字格式有很多共同点。
  • 我不确定那里发生了什么?我不知道为什么线程关闭,因为我没有 mod 权力......据我所知。我重新打开了。
  • @RoryMcCrossan 如果您的标签中有金色徽章,您可以像 mod 一样将其作为副本关闭
  • @RoryMcCrossan 干得好!我正在寻找相反的机制

标签: javascript jquery formatting


【解决方案1】:
var i = 0;

str.replace(/Func:{[^}]+}/g, function(c) {
    return '{' + i++ + '}';
});

或者更灵活的方式:

var i = 0,
    func = 'Func:';

str.replace(new RegExp(func + '{[^}]+}', 'g'), function(c) {
    return '{' + i++ + '}';
});

给你一个完整的方法:

String.prototype.createFormattingString = function(prefix, open, close) {
    var re = new RegExp(prefix + open + '[^' + close + ']+' + close, 'g'),
        i = 0;

    return this.replace(re, function(c) {
        return '{' + i++ + '}';
    });
};

'(VAR > Func:{ some text })'.createFormattingString('Func:', '{', '}');
'(VAR > Func:[ some text ])'.createFormattingString('Func:', '\\[', '\\]');

【讨论】:

  • 谢谢,这正是我想要的。
  • @LIUFA 这并不正确。我已经发布了更好的解决方案。
  • 从技术上讲,我还欠你一个 +1,因为你还修复了一个错误 :)
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-05-28
  • 1970-01-01
  • 2023-03-14
  • 1970-01-01
  • 2014-06-07
  • 1970-01-01
相关资源
最近更新 更多