在捕获组前插入 $

Insert $ in front of capture group

我有以下输入文本:

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

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

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

我对正则表达式的尝试:

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

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

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

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

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

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

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

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

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

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

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