gpt4 book ai didi

javascript - 删除所有不在单引号或双引号之间的调试器

转载 作者:行者123 更新时间:2023-11-30 13:57:07 25 4
gpt4 key购买 nike

我正在尝试实现一个正则表达式,该表达式从文件中删除所有调试器,除非该调试器在...

  1. 单引号
  2. 双引号

我有以下适用于双引号的代码,但我不确定如何也包含单引号。

var removeDebuggers = (str) => {

str = str.replace(/debugger(?=([^"]*"[^"]*")*[^"]*$)/g, "");

console.log(str)

}

removeDebuggers(`
Here is a 'debugger' in single quotes.
- DOESN'T WORK.
Another "debugger test" but with double quotes.
- WORKS.
"Testing this debugger also."
- WORKS.
My final debugger not in quotes.
- WORKS.
`)

我正在努力的结果是“Here is a 'debugger' in single quotes.”中的调试器也没有被删除。任何不在双引号或单引号内的调试器都应该单独放置。

最佳答案

当您在所有上下文中删除一个字符串但在单引号或双引号内时,匹配引号并将它们捕获在一个组中以便稍后在结果字符串中恢复并在替换模式中对该组进行反向引用会更容易:

str = str.replace(/("[^"]*"|'[^']*')|debugger/g, "$1");

参见 regex demo .

详情

  • ("[^"]*"|'[^']*') - 第 1 组(从替换模式中引用 $1):
    • "[^"]*" - "" 以外的 0 个或多个字符,然后是 "
    • | - 或者
    • '[^']*' - ',除 ' 之外的 0 个或多个字符,然后是 '
  • | - 或
  • 调试器 - 一个子字符串。

要将 debugger 匹配为整个单词,请使用单词边界 \bdebugger\b

要支持单引号/双引号内的转义序列,请将 ("[^"]*"|'[^']*') 模式扩展为 (""[^"\\] *(?:\\[\s\S][^"\\]*)*"|'[^'\\]*(?:\\[\s\S][^'\\]*) *')。或者,更好的是 ((?:^|[^\/])(?:\\{2})*"[^"\\]*(?:\\[\s\S][^"\\]*)*"|'[^'\\]*(?:\\[\s\S][^'\\]*)*').

所以,增强版看起来像

str = str.replace(/((?:^|[^\/])(?:\\{2})*"[^"\\]*(?:\\[\s\S][^"\\]*)*"|'[^'\\]*(?:\\[\s\S][^'\\]*)*')|\bdebugger\b/g, '$1');

参见 this regex demo .

关于javascript - 删除所有不在单引号或双引号之间的调试器,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57046086/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com