2016-11-18 108 views
-1

假设之间的文本,我给出如下所示的正则表达式:获取捕捉组

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

使用这个表达式,我需要从改变一些文字:

/* This is a comment */ 

要:

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

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

如果我能够可靠地将文本拆分为一系列捕获组和非捕获文本,我就可以轻松完成这项工作。但是,这似乎不可能在一般情况下使用JavaScript正则表达式,因为exec不保存有关单个匹配索引的信息。有解决方案吗?

+3

*“正则表达式和转换规则都给了我;我不能要求一个不同的正则表达式格式。“*嗯......?!修复正则表达式是解决这个问题的正确方法 –

+2

并注意使用正则表达式来处理各种语言中的注释,使用上面的语法 –

+2

'(* /)'是不是一个有效的正则表达式。分组结构的开始符号不能被量化。 –

回答

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]'));

0

例如使用String.prototype.replace(),你可以通过它们的索引指的捕获组:

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

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

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

+1

但他说他不能改变正则表达式。 – 2016-11-18 17:14:15

+0

不幸的是,这并没有解决我的问题,它使用* given * regex执行替换。 –