在捕获组之间获取文本

时间:2016-11-18 16:32:58

标签: javascript regex

假设我得到了如下的正则表达式:

(\/*).*?(\*/)

使用这个正则表达式,我需要转换一些文本:

/* This is a comment */

要:

([/*] This is a comment [*/])

正则表达式和转换规则都给了我;我不能要求不同的正则表达式格式。

如果我可以将文本可靠地分成一系列捕获组和非捕获文本,我可以轻松地做到这一点。但是,通常使用javascript正则表达式似乎不可能,因为exec不保存有关各个匹配项的索引的信息。有解决方案吗?

2 个答案:

答案 0 :(得分:2)

使用正则表达式通过添加其他捕获组来转换正则表达式:

function addCapture(reg) {
  return new RegExp(reg.source.replace(/\(.*?\)|[^(]*/g,
    match => match[0] === '(' ? match : `(${match})`), reg.flags);
}

const regexp = /(\/\*).*?(\*\/)/;
const input = "/* This is a comment */";

console.log(input.replace(addCapture(regexp), '[$1]$2[$3]'));

答案 1 :(得分:0)

E.g。使用String.prototype.replace(),您可以通过索引引用捕获组:

var input = '/* This is a comment */'

var output = input.replace(/(\/\*)(.*)(\*\/)/, '([$1]$2[$3])')

console.log(output); // "([/*] This is a comment [*/])"