带有变量和$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