Javascript正则表达式替换捕获

时间:2018-08-21 15:26:58

标签: javascript node.js regex

我正在尝试在Nodejs应用中使用正则表达式。我通常在Python中使用它,它似乎有some differences

这是问题所在: 我有此字符串\newcommand{\hello}{@replace},并且仅当在第一个卷曲手镯中发现@replace时,才想用第二个卷曲手镯中的REPLACED替换\hello。因此,预期结果是:\newcommand{\hello}{REPLACED}

我尝试:

r = new RegExp('\\newcommand{\\hello}{(.*?)}');
s = '\\newcommand{\\hello}{@replace}';
s.replace(r, 'REPLACED');

但是什么都不会取代...任何线索吗?

3 个答案:

答案 0 :(得分:1)

r = new RegExp(/\\newcommand{\\hello}{@replace}/);
s = '\\newcommand{\\hello}{@replace}';
let a = s.replace(r, '\\newcommand{\\hello}{REPLACED}');

console.log(a)

输出为:"\newcommand{\hello}{REPLACED}"

答案 1 :(得分:0)

我不确定我是否正确理解了这个问题。这是您要找的吗?

function replaceWith(myReplacement) {
    var original = "\\newcommand{\\hello}{@replace}";
    var regex = "{\\hello}{@replace}";

    return original.replace(regex, `{\\hello}{${myReplacement}}`)
};


console.log(replaceWith("World"));

答案 2 :(得分:0)

执行此操作完全不需要正则表达式。您可以在第一个参数上简单地使用字符串:

use strict;
use warnings;
use List::Util 'shuffle';

my $attempts = 1000000;
my $pairs = 10;
my @socks = (('R') x $pairs, ('L') x $pairs);

my $correct_pairings = 0;
for my $attempt (1..$attempts) {
    my $picked_socks = join '', shuffle @socks;
    ++$correct_pairings if $picked_socks =~ /^(?:(.)\1){$pairs}/;
}
print "$correct_pairings correct pairings in $attempts attempts\n";