在捕获组前面插入$

时间:2018-12-31 03:23:19

标签: javascript regex regex-group

我有以下输入文本:

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函数来测试连续$符号的行为

2 个答案:

答案 0 :(得分:2)

JavaScript字符串中的反斜杠仅在其处于转义序列中时才有意义-例如,'\n'被翻译为原义换行符,'\\'被翻译为文字反斜杠,等等。如果您在转义序列的不是部分的字符前加上反斜杠,例如'\$',则反斜杠将被忽略:

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

不过,文字反斜杠仍无法解决您的问题。请参见docs-将文字$作为替换字符串的一部分插入,请使用$$$本质上是一个转义字符,有点像{{ 1}}是字符串文字中的转义字符):

\

答案 1 :(得分:1)

由于要搜索“ 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 $") );