gpt4 book ai didi

JavaScript:转义符号后不匹配

转载 作者:行者123 更新时间:2023-12-03 23:59:52 26 4
gpt4 key购买 nike

我正在使用 Regex 替换变量中的子字符串 $0。但是现在我正在寻找一个不匹配 $0 的表达式,当它像 \$0 一样转义时。

代码示例如下所示:

let string = "Hello '$0'. '$0' becomes the World. This shall remain \$0";
string = string.replace(/.../g, "World");
// "Hello 'World'. 'World' becomes World. This shall remain \$0"

处理上面示例代码中显示的情况的正确表达式是什么?

非常感谢您!

最佳答案

正确的方法是在 $0 之前考虑任何转义的反斜杠:\\$0\$0 应该变成 \\World\$0因为第一个 \\ 表示单个反斜杠,紧随其后的 $0 未转义

所以,你可以使用

.replace(/((?:^|[^\\])(?:\\{2})*)\$0/g, "$1World")

参见 regex demo .

请注意,即使 World 以数字开头,它在 JavaScript 中仍然可以正常工作。您可以向模式添加更多限制,例如\$0 之后的单词边界或 (?!\d) 前瞻以确保后面没有数字,但这不在问题范围内。

图案细节

  • ((?:^|[^\\])(?:\\{2})*) - 捕获第 1 组:
    • (?:^|[^\\]) - 字符串开始位置或 \
    • 以外的字符
    • (?:\\{2})* - 双反斜杠重复 0 次或多次
  • \$0 - $0 子字符串。

JS 演示:

var s = "Hello '$0'. '$0' becomes the World. This shall remain \\$0. Extra: \\\\$0 is World, \\$0 is escaped.";
console.log("The string is: '" + s + "'");
console.log("The result is: '" + s.replace(/((?:^|[^\\])(?:\\{2})*)\$0/g, "$1World") + "'");

注意:字符串文字包含两个反斜杠,其中字符串包含一个文字反斜杠。如果您使用单个反斜杠,它要么消失(当转义序列未知时),要么将形成一个字符串转义序列(例如 \n 用于换行符,\t将定义制表符等)。

关于JavaScript:转义符号后不匹配,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/57539287/

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