Javascript正则表达式与变量和$ 1

时间:2013-12-03 20:23:24

标签: javascript regex

我已阅读How do you pass a variable to a Regular Expression javascript

我正在寻找创建一个正则表达式来获取和替换变量值。

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

其中$1 = \d+ +1

和...没有增量......它不起作用......

它返回的内容如下:

[abc]$1

有什么想法吗?

3 个答案:

答案 0 :(得分:1)

我认为您需要阅读有关正则表达式的更多信息。您当前的正则表达式出现在:

/[abc][d+]/g

哪个匹配“a”“b”或“c”,后跟“d”或“+”,例如:adc+bd甚至zebra++等。

一个很好的入门资源是:http://www.regular-expressions.info/javascript.html

答案 1 :(得分:1)

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

section = "abc";
reg = new RegExp("(\\["+section+"\\]\\[)(\\d+)(\\])","g");
num = duplicate.replace(reg,function(_,before,number,after) {
    return before + (parseInt(number,10)+1) + after;
});

答案 2 :(得分:0)

我至少看到两个问题。

\字符在JavaScript字符串中具有特殊含义。它用于转义字符串中的特殊字符。例如:\nnew line\rcarriage return。您还可以转义引号和撇号以将它们包含在字符串中:"This isn't a normally \"quoted\" string... It has actual \" characters inside the string as well as delimiting it."

第二个问题是,为了使用反向引用($1$2等),您必须在模式中提供capturing group(正则表达式需要知道什么反向引用)。尝试将模式更改为:

'\\[' + section + '\\]\\[(\\d+)\\]'

请注意双反斜杠。这会转义反斜杠字符本身,使其成为字符串中的文字\。另请注意使用()(捕获组)。这告诉正则表达式为$1捕获的内容。

在使用section === 'abc'

实例化正则表达式之后
new RegExp('\\[' + section + '\\]\\[(\\d+)\\]', 'g');

您的模式现在是:

/\[abc\]\[(\d+)\]/g

您的.replace将返回\d+++(其中\d+是输入字符串中捕获的数字)。

演示:http://jsfiddle.net/U46yx/