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