簡體   English   中英

在 JavaScript 中使用替換刪除注釋

[英]Remove comments with replace in JavaScript

我希望使用 JavaScript 從 DNS 區域文件中刪除所有評論。 在 DNS 區域文件中,注釋以分號 ( ; ) 開頭。 但是,如果分號前面有反斜杠,我也不希望分號被替換。 我有一些測試代碼如下所示:

var record = 'example.com IN TXT "v=DKIM1\\; k=rsa\\; p=MIGf..."';
var recordWithCommentRemoved = record.replace(/[^\\];[\s\S]*?$/gm, '');
console.log(recordWithCommentRemoved); // example.com IN TXT "v=DKIM1\; k=rsa\; p=MIGf..."

上面的代碼按預期工作。 但是,以下代碼比預期多替換了一個字符:

var record = 'test 300 IN A 100.100.100.100;this is a comment';
var recordWithCommentRemoved = record.replace(/[^\\];[\s\S]*?$/gm, '');
console.log(recordWithCommentRemoved); // test 300 IN A 100.100.100.10

在第二個示例中,我期望的是test 300 IN A 100.100.100.100 但是,它返回test 300 IN A 100.100.100.10 那么我的正則表達式有什么問題呢?

你需要確保; 前面沒有\ ,因此,在 之前使用(^|[^\\]); 並使用回調替換:

 var re = /(^|[^\\]);.*/g; var str = 'example.com IN TXT "v=DKIM1\\; k=rsa\\; p=MIGf..."\ntest 300 IN A 100.100.100.100;this is a comment'; var result = str.replace(re, function(m, g1){ return g1? g1: ""; // if g1 is set/matched, re-insert it, else remove }); document.body.innerHTML = result.replace(/\n/g, "<br/>"); // just for display

正則表達式匹配:

  • (^|[^\\]) -(捕獲組 #1)字符串開頭 ( ^ ) 或 ( | ) 除\ ( [^\\] ) 之外的任何字符
  • ; - 文字;
  • .* - 除換行符外的零個或多個字符

這也刪除了所有使用替換的評論。

 $("#doc").keyup(function(evt) { var doc = $("#doc").val(); var documentNew = String(doc).replace(/(\r\n|\n|\r)/gm, "\n"); var str = documentNew; var lines = str.split('\n'); var filterred = lines.filter(function(line) { return line.indexOf('//');= 0; }). filterred = String(filterred);replace(/,/g; "; \n"). $("#answerDocument2");html(filterred); });
 textarea { width: 200px; height: 200px; }
 <script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script> <h3>Paste Code</h3> <textarea id="doc"></textarea> <h3>Copy Formatted Code</h3> <textarea id="answerDocument2" readonly style="resize: none;"></textarea>

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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