簡體   English   中英

使用正則表達式替換/刪除 2 個 javascript 注釋之間的文本

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM