【问题标题】:JS string: Replace with index in regexJS字符串:用正则表达式中的索引替换
【发布时间】:2017-05-13 19:12:55
【问题描述】:

我对正则表达式几乎没有经验,我想知道您将如何替换由正则表达式标识的字符串中的一个部分,其中索引是所标识部分的一部分?

这是我的示例字符串:

let exampleStr = "How do I {0} the {n} with the {1} in my array?";

这是我的数据数组:

let arr = ["replace", "items"];

现在,通过替换和正则表达式,我想将 {#} 部分中的索引与匹配索引的数组元素进行匹配。

结果字符串:

let result = "How do I replace the {n} with the items in my array?";

注意它会忽略 {n},因为它不包含数值。

我可以使用 Array.indexOf、Number.isNaN、typeof 等来做到这一点,但正则表达式似乎是“正确”且更简洁的方法,虽然有点难以阅读:)

提前致谢。

【问题讨论】:

  • 如果您知道要替换的确切字符串,为什么还需要 ajax?
  • 作为一名程序员,我真的很喜欢通用的解决方案。但是一般的例子有时很难掌握,可能会使读者感到困惑。所以,当我在寻找一个通用的解决方案时,我发现以更具体的方式举一个例子更合适。

标签: javascript arrays regex string


【解决方案1】:

你可以使用replace with a callback:

let exampleStr = "How do I {0} the {n} with the {1} in my array?";
let arr = ["replace", "items"];

let result = exampleStr.replace(/\{(\d+)\}/g, (g0, g1)=>arr[parseInt(g1,10)]);
console.log(result);

该模式很简单 - 它匹配大括号内的数字,并将该数字捕获到第 1 组。
回调函数解析数字(这不是严格要求,但arr["1"] 并不漂亮),然后从数组中返回正确的元素。
回调可以使用更多的错误检查。

【讨论】:

  • @torazaburo - 你是对的,但这是一种风格选择。 {} 是元字符,我通常喜欢转义它们。在数字的背景下,这在这里更加合理。 {\d+} 可能变为{2},例如在测试或修改代码中,导致语法错误。
  • 谢谢。此解决方案似乎要求您事先知道有两个字符串要替换({0}{1})。如果要替换的字符串数量未知,这意味着可能有{2}{3}{4}、...?
  • @IanY。 - 只要您提供正确的arr,这应该适用于任何数字 - 可以动态创建。这里的前两行是从问题中复制的,所以我会有可运行的代码。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-10-14
  • 2013-02-19
  • 2018-07-13
  • 2015-11-30
  • 2021-11-29
相关资源
最近更新 更多