[英]Replace/Delete text between 2 javascript comments with regex
我想替換/刪除 2 個 javascript 注釋之間的任何文本(也帶有換行符),但正斜杠讓我頭疼。
我目前擁有但不起作用的內容:
var text="//beginTESTTESTTEST//end";
var regex = "/\//begin+(.)+\//end*/g";
console.log(text.replace(regex,""));
預期輸出將是
“//開始//結束”
謝謝
有幾個問題:
/regex_pattern/
周圍使用單/雙引號或反引號),因為斜杠成為模式的一部分,它會破壞正則表達式(.)+
沒有什么意義,因為捕獲組放置在.
匹配除換行符以外的任何字符,並且有效地從匹配的序列中捕獲最后一個字符。 但是:我們捕捉我們需要保留的東西,我們只匹配我們想要丟棄的東西。 因此,將(...)
僅放在您想要保留的那些部分的周圍, //begin
和//end
並在替換部分中使用反向引用來恢復結果中的這些子字符串*
是貪婪的,如果字符串中有多個匹配項, .*
將在多個分隔符之間過度匹配,因此使用惰性版本.*?
.
不匹配換行符,因此最好使用[^]
(僅在 ECMAScript 正則表達式中)、 [\\s\\S]
/ [\\d\\D]
/ [\\w\\W]
,或使用.
帶有s
標志(在當代 ECMAScript 2018+ 兼容的 JS 環境中)/
是“特殊的”,需要用\\
轉義。因此,這里有幾個可能的修復方法:
var text="//beginTESTTESTTEST//end"; // Capture the parts you need to keep and use backreferences in the replacement console.log(text.replace(/(\\/\\/begin)[\\w\\W]*?(\\/\\/end)/g, "$1$2")); // Just match the pattern and use a literal in the replacement console.log(text.replace(/\\/\\/begin[\\w\\W]*?\\/\\/end/g, "//begin//end"));
使用 Lookahead 和 Lookbehind :
text.replace(/(?<=\/\/begin)(.*)((?=\/\/end))/gm,'');
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.