【问题标题】:Insert $ in front of capture group在捕获组前面插入 $
【发布时间】:2018-12-31 03:23:19
【问题描述】:

我有以下输入文本:

string name;
string type;
string class;
...

我希望将它们转换为以下内容:

string $name;
string $type;
string $class;
...

我对正则表达式的尝试:

Javascript:
"string name;".replace(/string (\w+)/,"string \$$1");
Produces (javascript console):
string $1;
string $1;
string $1;
...
Produces (regexr prompt):
string \$1;
string \$1;
string \$1;
...

为什么在第一个 $ 前面插入反斜杠不起作用?实现这一点的正确表达方式是什么?

注意:我使用 regexr(运行客户端 javascript)来批处理我的文本,并使用 Javascript 控制台和 Chrome Devtools 中的 String.prototype.replace 函数来测试连续 $ 符号的行为。

【问题讨论】:

    标签: javascript regex regex-group


    【解决方案1】:

    Javascript 字符串中的反斜杠只有在 转义序列 中才有意义 - 例如,'\n' 被翻译为文字换行符,'\\' 被翻译为文字反斜杠等. 如果您在一个不是转义序列一部分的字符之前有一个反斜杠,例如'\$',则反斜杠将被忽略:

    const str = '\$';
    console.log(str);
    console.log(str.length);

    不过,文字反斜杠并不能解决您的问题。请参阅docs - 插入文字 $ 作为替换字符串的一部分,使用 $$$ 本质上是这里的转义字符,有点像 \ 是字符串文字中的转义字符):

    console.log(
      "string name;"
        .replace(/string (\w+)/, "string $$$1")
    );

    【讨论】:

      【解决方案2】:

      由于您正在搜索“string \w+”的组合,您可以使用更简单的搜索和替换:

      str.replace(/string /g, "string $")
      

      这会在每个 string 之后添加一个 $,后跟一个空格

      var str = "string name;\nstring type;\nstring class;"
      console.log("Original:")
      console.log(str);
      console.log("New:")
      console.log( str.replace(/string /g, "string $") );

      【讨论】:

        猜你喜欢
        • 2020-01-26
        • 2016-05-29
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多