【问题标题】:How to capture n groups in regex so i can substitute them in js如何在正则表达式中捕获 n 个组,以便我可以在 js 中替换它们
【发布时间】:2016-09-02 10:07:07
【问题描述】:

我有以下字符串:

[{par1}, {par2}, ..., {parN}]

我正在使用以下正则表达式捕获这一点:

(\{\S*\})

这很好用,并且可以分组捕获我的参数:$1 = par1, $2 = par2... 等

我的问题是,我想用 javascript 对所有这些组进行一些操作。 我知道如何为 1 组做。

str.replace(new RegExp((\{\S*\}),g),'whatever'+$1) //Probably need to add more escape characters

我的问题是如何将 $1 替换为 'whatever+'$1,$2 替换为 'whatever'+$2... 等等

[{par1},{par2}] ==> [mypar1,mypar2]

编辑

用参数解释我想更详细地做的事情:

从 [{par1},{par2}] 我需要提取 par1 和 par2,所以我可以用它们调用一个函数,这将返回不同的值:

function translate(par) {
  //return different things for every parameter
}
//so finally will be like: 
str.replace(new RegExp((\{\S*\}),g),translate($1))

【问题讨论】:

  • 到底是不是只想去掉所有的大括号? .replace(/[{}]+/g, '')?
  • 不不,我想删除大括号,获取参数本身,然后使用该参数进行操作。所以它不会总是替换相同的东西,它将取决于参数
  • 如果你需要在更多代码中检查这些值,你需要使用匿名方法作为replace的第二个参数。

标签: javascript regex replace


【解决方案1】:

使用回调函数作为String.replace函数的第二个参数:

var str = '[{par1}, {par2}, ..., {parN}]',
    prefix = 'whatever',
    replaced = str.replace(/\{(\S+)\}/g, function (p0, p1) {
        // ... some other logic
        return prefix + p1;
    });

console.log(replaced);  // "[whateverpar1, whateverpar2, ..., whateverparN]"

【讨论】:

  • 完美!不知道替换接受了一个函数作为所有参数的回调!非常感谢!
猜你喜欢
  • 2011-12-16
  • 1970-01-01
  • 1970-01-01
  • 2013-06-27
  • 2010-11-02
  • 2012-03-01
  • 2020-04-26
  • 2016-06-09
  • 1970-01-01
相关资源
最近更新 更多