【问题标题】:Javascript Extract Tokens from String into ArrayJavascript从字符串中提取标记到数组中
【发布时间】:2015-03-18 13:41:04
【问题描述】:

我有一个类似的字符串:The zoo has a panda named {{123}} that is colored {{234}}

我有一个代表每个标记的数组,例如:

[ { label: 'Ralph', id: '123' }, { label: 'White and Black', id: '234' } ]

我想遍历字符串并将{{token}} 替换为实际标签,但我还需要跟踪我要替换的字符位置。拉尔夫将是位置 26 字符。一个更棘手的情况是:在我将 {{123}} 替换为 Ralph 之后,颜色的文本位置会有所不同,因为 Ralph 是 5 个字符,而标记是 7 个字符。

对解决这个问题的最快方法有什么想法吗?

【问题讨论】:

  • 尝试先解决您的问题。从那里开始,尝试优化它。
  • 获取所有匹配项并获取索引的正则表达式是什么?我想那是我缺少的部分。
  • @amcdnl 为什么是正则表达式? indexOf()很棒
  • 为什么需要索引?您是否需要它们在之前完成任何替换,或在完成导致该令牌的替换之后,或者......?
  • @Haketo 是的,我完全想多了! indexOf 是完美的。有时它只是有助于与他人进行头脑风暴。

标签: javascript regex


【解决方案1】:

这可能没有你想象的那么难:

var str = "The zoo has a panda named {{123}} that is colored {{234}}";
var array = [ { label: 'Ralph', id: '123' }, { label: 'White and Black', id: '234' } ];

for(var i = 0; i < array.length; i++){
  str = str.replace("{{" + array[i].id + "}}", array[i].label);
}
alert(str);

只需循环遍历数组并将字符串中的每个键替换为所需的标签。如果在字符串中没有找到密钥,replace 将不执行任何操作。

【讨论】:

  • OP 也想要被替换项目的索引,虽然目前还不清楚为什么,或者以什么形式。
  • @PaulRoub:我猜他想要substring-like 方法的索引,他一开始就不应该使用。
  • 评论不用于扩展讨论;这个对话是moved to chat
  • @bluefeet:实际上有一些有用的 cmets,与答案相关 (example).... 我同意第二部分没有增加任何价值。 (感谢您搬回那些)
  • 所有的 cmets 都在聊天室里,这里举起自动标记有点失控。由于讨论仍在进行中,我将其移动。
【解决方案2】:

如果您想跟踪令牌位置,您可以使用String.prototype.split 分割每个令牌,那么您不必关心索引。

var str = "The zoo has a panda named {{123}} that is colored {{234}}";
str.split(/\{\{(.+?)\}\}/g);

//["The zoo has a panda named ", "123", " that is colored ", "234", ""]

fiddle使用示例

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-05-22
    • 1970-01-01
    • 2018-03-29
    • 2015-04-18
    • 2021-05-21
    • 2020-11-26
    • 1970-01-01
    相关资源
    最近更新 更多