带有变量和$1的Javascript正则表达式

带有变量和$1的Javascript正则表达式,javascript,regex,Javascript,Regex,我读过 我想创建一个正则表达式来获取一个值并用一个变量替换它 section = 'abc'; reg = new RegExp('\[' + section + '\]\[\d+\]','g'); num = duplicate.replace(reg,"$1++"); 其中$1=\d++1 而且。。。没有增量。。。它不起作用 它返回类似于: [abc]$1 有什么想法吗?我想你需要更多地阅读正则表达式。您当前的正则表达式显示为: /[abc][d+]/g 它将匹配一个“a”、“b

我读过

我想创建一个正则表达式来获取一个值并用一个变量替换它

 section = 'abc';
 reg = new RegExp('\[' + section + '\]\[\d+\]','g');
 num = duplicate.replace(reg,"$1++");
其中
$1=\d++1

而且。。。没有增量。。。它不起作用

它返回类似于:

[abc]$1

有什么想法吗?

我想你需要更多地阅读正则表达式。您当前的正则表达式显示为:

/[abc][d+]/g
它将匹配一个“a”、“b”或“c”,后跟一个“d”或“+”,比如:
ad
c++
bd
甚至
zebra++
等等


一个很好的入门资源是:

您的正则表达式是正确的,但是要执行任何类型的操作,您必须使用替换回调:


我至少看到两个问题

\
字符在JavaScript字符串中具有特殊含义。它用于转义字符串中的特殊字符。例如:
\n
新行
\r
回车
。您还可以转义引号和撇号以将它们包含在字符串中:
“这不是一个正常的带引号的字符串……它在字符串中有实际的\”字符,并对其进行分隔。”

第二个问题是,为了使用反向引用(
$1
$2
等),您必须在模式中提供一个
捕获组
(regex需要知道反向引用的内容)。请尝试将模式更改为:

'\\[' + section + '\\]\\[(\\d+)\\]'
请注意双反斜杠。这将转义反斜杠字符本身,使其成为字符串中的文字
\
。还要注意
(捕获组)的使用。这将告诉正则表达式为
$1
捕获什么

在正则表达式实例化之后,使用
节===“abc”

new RegExp('\\[' + section + '\\]\\[(\\d+)\\]', 'g');
您的模式现在是:

/\[abc\]\[(\d+)\]/g
您的
.replace
将返回
\d++
(其中
\d++
是从输入字符串中捕获的数字)


演示:

复制的
变量发布示例数据..不正确。这是基本的反斜杠行为。反斜杠后跟任何不使其成为转义序列的东西,都将保持文本。比这更奇怪的是,
a+
没有通过。我猜是因为
+
没有转义。不管怎样,它都是一个非常好的mUddle regex.@NiettheDarkAbsol-我也这么认为,但根据Chrome控制台,rgthree是对的。除了我上面解释的
+
问题之外。试试看:嘿,伙计们,看起来你们已经弄明白了,但是反斜杠在这里的字符串中逃逸,而不是在RegExp本身中。你们需要两个反斜杠如果你运行
newregexp('\['+'abc'+'\]\[\d+\]','g')。测试('a+'))
在Chrome控制台中,它应该返回
true
。你是对的,它确实通过了。我不知道我第一次做了什么不同的事情,但我一定输入了错误的内容。这更有意义。
/\[abc\]\[(\d+)\]/g