javascript - 在 JavaScript 中使用替换删除注释

标签 javascript regex replace

我希望使用 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)字符串开头 (^) 或 (|)除了 \ ([^\\])
  • 之外的任何字符
  • ; - 文字 ;
  • .* - 除换行符外的零个或多个字符

关于javascript - 在 JavaScript 中使用替换删除注释,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34897711/

相关文章:

javascript - 在命名空间函数中引用所需的对象

javascript - JQuery检查多个输入值是否相同

python - 如何使用正则表达式匹配请求行?

javascript - 如何不允许仅设置相同字符和特殊符号 - regex js

r - GNU R : How to remove repeated characters at the beginning and end of every word of a string?

python - Pandas 使用 regex=true 替换部分单词

JavaScript 编程函数

javascript - Threejs如何转换一个Vector3?

java - (?i) 正则表达式结果 - "Nothing"被 Something 取代

python - 替换 Pandas 数据框中所有出现的字符串(Python)