2016-11-18 131 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執行替換。 –