【问题标题】:Regex and Javascript to remove numbers from string正则表达式和 Javascript 从字符串中删除数字
【发布时间】:2012-12-28 19:00:20
【问题描述】:

我有一个字符串:

 str =    'View:{
            Name:"View1",
            Image:{
                BackgroundImage:"Image.gif",
                Position: [0, 0],
                Width: 320,
                Height: 480
            },

            Button:{
                BackgroundImage:"Button.gif",
                Transition:"View2",
                Position: [49, 80],
                Width: 216,
                Height: 71
            },

            Button:{
                BackgroundImage:"Button2.gif",
                Position: [65, 217],
                Width: 188,
                Height: 134
            },'

我使用这个正则表达式将 '_#' 添加到末尾有 ':{' 的元素中

var i = 0;
str = str.replace(/([^:]+):{/g, function(m, p1) { return p1 + "_" + (++i).toString() + ":{"; });

输出是

str =    'View_1:{
        Name:"View1",
        Image_2:{
            BackgroundImage:"Image.gif",
            Position: [0, 0],
            Width: 320,
            Height: 480
        },

        Button_3:{
            BackgroundImage:"Button.gif",
            Transition:"View2",
            Position: [49, 80],
            Width: 216,
            Height: 71
        },

        Button_4:{
            BackgroundImage:"Button2.gif",
            Position: [65, 217],
            Width: 188,
            Height: 134
        },'

然后我用它做了一堆东西,现在我需要从中去掉'#'。我将如何删除那些'#'

不是必须的,但我遇到的另一个问题是第一个正则表达式从 0 开始递增,并为每个元素提供下一个递增的数字。我正在尝试使每个元素在其类型上递增。 像这样:

str =    'View_1:{
        Name:"View1",
        Image_1:{
            BackgroundImage:"Image.gif",
            Position: [0, 0],
            Width: 320,
            Height: 480
        },

        Button_1:{
            BackgroundImage:"Button.gif",
            Transition:"View2",
            Position: [49, 80],
            Width: 216,
            Height: 71
        },

        Button_2:{
            BackgroundImage:"Button2.gif",
            Position: [65, 217],
            Width: 188,
            Height: 134
        },'

关于我在这里做错了什么有什么意见吗?

【问题讨论】:

  • 您不是遇到语法错误吗?
  • 你为什么不直接修复构建这个无效 JSON 对象的问题 :) 似乎应该构建一个对象数组。
  • 为什么需要数字独立递增?您是否担心数量不足? :)
  • 信不信由你,这个字符串从来没有打算成为一个 json 对象。它是一个指令脚本,所以我不能修改传入的字符串。我必须将其解析为一个对象。根据 Web 表单对字符串进行一些更改并将其传回 - 减去数字。有意义吗?
  • @Barmar :)。我可能会得到包含 30 或 40 个按钮以及大量图像和图层的字符串。需要某种组织。

标签: javascript regex parsing


【解决方案1】:

对于第一个问题,只需将_\d+:{ 替换为:{

对于第二个,您需要为每种类型设置一个单独的计数器。试试这个:

var i = {};
str = str.replace(/([^:]+):{/g, function(m, p1) {
    i[p1] = (i[p1] || 0)+1;
    return p1 + "_" + i[p1].toString() + ":{";
});

【讨论】:

  • 我现在正在测试第一个。但是第二个只是将“_1”分配给所有这些。似乎没有增加。这是一个演示 jsfiddle.net/XLMCc 顶部显示输出为对象,下方显示字符串
  • 好的,经过一些调试,我发现你需要在我给你的那个正则表达式中使用/(\S+):{/g,否则它也匹配上一行的内容,这就是它给你@987654326的原因@关于一切。至于_\d+:{,这将匹配添加的数字,如果替换为空字符串,则将其删除。
  • 感谢 Kolink。第一个效果很好。我遇到的问题是第二个问题。你能为我提供整个 .replace() 吗?我试过把它关掉,但它不起作用。
  • .replace(/_\d+:{/g,':{')
猜你喜欢
  • 2021-09-07
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2023-03-25
  • 2021-01-17
  • 2014-06-20
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多