假设我得到了如下的正则表达式:
(\/*).*?(\*/)
使用这个正则表达式,我需要转换一些文本:
/* This is a comment */
要:
([/*] This is a comment [*/])
正则表达式和转换规则都给了我;我不能要求不同的正则表达式格式。
如果我可以将文本可靠地分成一系列捕获组和非捕获文本,我可以轻松地做到这一点。但是,通常使用javascript正则表达式似乎不可能,因为exec
不保存有关各个匹配项的索引的信息。有解决方案吗?
答案 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 [*/])"